敵を攻撃して撃墜できるようにします。また敵弾に接触するとミスとなります。今回はこの機能を追加します。

爆発を描画するためのExplosionクラス

そのまえに爆発を描画するためのクラスを作成します。これは弾丸の当たり判定と爆発の処理 3Dっぽい縦シューティングゲームをつくるとほとんど同じです。

自機から弾丸を発射する

自機から弾丸を発射する処理を実装していなかったので、ここで実装します。

まずは自機から発射された弾丸を描画するためのクラスを示します。

JikiBurretクラス

弾丸を発射する処理を示します。Shotメソッドが実行されるとJikiBurretsに弾丸オブジェクトが格納されます。あとはMoveJikiBurretsメソッドが呼び出されると上へ飛んでいきます。

それからこれは弾丸をバンバン発射するシューティングゲームではないので連射はできない仕様にしています。JikiBurretsのなかに弾丸オブジェクトがある場合はなにもおきません。Shotメソッドは弾丸を発射することができたかどうかその結果も返します。

自機から発射された弾丸が命中したときの処理

次に自機から発射された弾丸が敵に当たったかどうかの判定と、命中した場合の処理を示します。

敵に命中したときは爆発の処理をするとともにScoredイベントを発生させます。イベントハンドラの引数は追加される点数です。待機中の敵と退却中の敵は30点、攻撃中の敵は50点にします。

撃墜した場合、敵は全滅しているかもしれません。その場合は次のステージに進みます。

自機から発射された弾丸の当たり判定

自機から発射された弾丸の当たり判定の処理を示します。

爆発の処理

爆発の処理を示します。爆発が4方向へ広がるように、そして乱数をつかって単調な爆発描画にならないようにしています。

敵が全滅したら次ステージへ

敵が全滅したかどうか調べる処理を示します。全滅している場合は3秒後にInitEnemiesメソッドを実行して初期状態と同じように敵を生成します。

被弾したときの処理

敵にやられたときの処理も必要です。敵の弾丸や機雷に当たった場合はミスとなります。

自機被弾を判定するCheckJikiDeadメソッド

自機が被弾したかどうかを判定するCheckJikiDeadメソッドを示します。

自機死亡時の処理

自機が死亡した場合の処理を示します。自機死亡の場合はイベントを発生させます。残機を1減らして0になっていなければ3秒後にゲームを再開します。残機が0になったらゲームオーバーです。

ゲームオーバー時の処理

ゲームオーバーになったときの処理です。これもイベントを発生させます。

それからゲームをもう一回するときのメソッドも作成しておきます。残機を最大数に戻してIsJikiDeadをfalseに変更して敵と敵弾、機雷をクリアします。

あとはUpdateメソッドとDrawメソッドでこれらを適切に呼び出すだけです。

Form1クラスでイベント処理をする

Form1クラスでイベントの処理をおこないます。ついでに音も鳴らしましょう。

まずイベント処理ができるようにイベントハンドラを追加します。

スコアと残機の表示

スコアと残機を表示するための処理を示します。得点が追加されたり残機が変更されたら表示されているスコアと残機数を変更します。

自機が死亡したら0.1秒間隔で10回背景の色を変えます。

スペースキーがおされたときは実際に自機から弾丸が発射されたことを確認してから発射音を鳴らします。

機雷が着弾したときの処理は次回示します。