オブジェクト指向ゲームプログラミングの落としどころ?
複数のキャラクタ(自機、ショット、敵、敵弾、ボム、アイテム、地形、etc...)が絡むとどうしてもコードがスパゲッティ化してきてしまうのです。これはつまりキャラクタという相互依存性の高いオブジェクトに対してモジュール化という概念がマッチしないということでしょう。
実は STG 作ったことないけど、何となく妄想してみる。
ストラウストラップのオブジェクト指向は、共通性の括り出しがメインだと俺は考えてます。
これを is-a 関係でまとめると、オブジェクトの共通項を基底クラスに、そうでないものを派生クラスに……って感じになります。
ただ、もう1つ has-a 関係というのもありまして、これを使うと STG でも上手く行くのでは……とか思ってたり。
つまり自機とか敵弾とかが 『自走』 するんではなく、それらは別な管理オブジェクトによって 『操作』 される〜って感じですね。
- ゲーム管理オブジェクト
- 自機と敵機の動きを管理
- 自機とショットの動きを管理
- 敵弾と敵機の動きを管理
- 敵機Aの動きを管理
- 敵機Bの動きを管理
- ……
- 敵弾Aの動きを管理
- 敵弾Bの動きを管理
- ……
- スコアの描画を管理
- 背景の動きを管理
- 自機と敵機の動きを管理
みたいな、互いに影響を及ぼしあうものをまとめた has-a 階層です。
管理オブジェクトを管理するオブジェクトを作り、それらで木構造を作るみたいな感じです。
これらの下に、実際の自機や敵弾などが張り付くんですね。
妄想爆裂。まともに実装しないほうが良いかも。・゚・(ノД`)・゚・。
まあ、話はズレますが、共通性の括り出しを行う〜ってスタンスだと枠から外れることをしたいときなんかにはドツボにハマりますね。やっぱり。
けどゲームにはそういうの少なからずありますし……どうしたものか。