C# OpenTKでスクランブルのようなゲームを作成しています。

スクランブルは山岳、洞口、ファイアボール、ビル、要塞、基地中枢の6つのステージがあり、最後の基地中枢ステージで敵の指令基地を破壊したらゲームクリアとなります。ゲームクリアをするとまた最初のステージにもどります。ここでは最後の基地中枢のプログラミングをおこないます。

まず敵の指令基地を描画するためのクラスを作成します。

敵の司令基地を破壊することができなかった場合はそのまま自機は飛行を続けます。すると次の敵の司令基地が出現します。そして以降は自機が墜落するか敵の司令基地を破壊するまでこの繰り返しになります。

マップのなかには司令基地の位置を3箇所指定しています。3回でも破壊できない場合は燃料切れで墜落することになるのでそれ以上は指定する必要は無いと思われます。

まずマップを初期化するときに敵の司令基地の位置を読み込みます(StageクラスのInit()メソッドを参照)。そして司令基地がある位置まで自機が進むとDraw()メソッド内でBaseクラスのDraw()メソッドが呼び出されて基地が描画されるようになります。

最初にStageクラスのInit()メソッドを示します。

Draw()メソッドに敵の基地を描画する機能を追加します。

基地に向けて弾丸を発射したり、爆弾を投下することで破壊できたかを調べるメソッドを作成します。

DoesHitBulletBase()メソッドやDoesHitBombBase()メソッドがtrueを返したら基地は破壊されたことを意味するので、ステージクリアのイベントを発生させます。

上記コードには isStageClearというフィールド変数があります。スクランブルの仕様では敵基地を破壊したあと自機が墜落するなどのミスをしてもこれはノーカウントとなり、ミスにはなりません。しかもこのゲームは、ステージが進むにつれてだんだん自機の燃費が悪くなり、敵基地を破壊するころには燃料切れということが増えてきます。そのためミス時にすでにゲームクリアをしているのかどうかの判定は重要になります。

あと現在挑戦しているステージが何ステージなのかわかるように表示できるようにしてみました。