再利用可能なゲームライブラリコアがきっと出来た
id:ZerOx4C:20091130で作っていたライブラリが多分出来ました。大雑把な構造はこう。
public abstract class UpdateEventArgs : EventArgs { } public abstract class RenderEventArgs : EventArgs { } public abstract class Game<TUpdateArgs, TRenderArgs> where TUpdateArgs : UpdateEventArgs where TRenderArgs : RenderEventArgs { public void Update(TUpdateArgs e) { } public void Render(TRenderArgs e) { } }
要するにジェネリックスを使って引数を好き勝手に出来るようにしたというわけです。
これで例えばGDI+用のゲームライブラリを作ろうと思ったなら、RenderEventArgsを継承してGraphics Screenプロパティを追加し、Gameを継承してゲームループを実装すれば済んでしまいます。
SDL.netならば、RenderEventArgsを継承してSurface Screenプロパティを追加し、Gameを継承してTickEventを追加すれば終わりです。
これで真面目に設計する目的であった「書き換えず、クラスの追加だけでの機能拡張」が実現されたということです。
さっきSDL.net用ライブラリを以前作ったものからほぼコピペで実装完了。今度は簡易テストに使うGDI+用と、新たに触ってみたいSlimDX用を実装してみることにします。
こういうプログラムは楽しいんだよなぁ・・・