現在の状態ではミスをしても自機から弾丸を発射できたり、すべての要塞を破壊してもステージクリア時の処理がおこなわれません。今回はこの状態を改善します。

まず自機が死亡した場合は弾丸を発射できなくします。そしてすべての爆発が終わったときに残機を減らしてゲームを再開させます。自機がゼロであればゲームオーバーの処理をおこないます。

isGameOverフラグを用意して最初はtrueにしておきます。またアプリケーションが開始されたときはゲーム開始前なので自機は表示させません。Jiki.IsDead = true にしておきます。

また自機が破壊され、残機がゼロになったらゲームオーバーです。Update()内でIsGameOver == true のときはなにもしません。

ミスしたときをどうやって判断すればよいでしょうか? ゲームオーバーではないのにJiki.IsDead == true のときです。爆発がおさまってからミス時の処理をおこないます。この場合は2秒処理を停止して、JikiRestart()メソッドを呼び出します。JikiRestart()では残機をひとつ減らして飛行中の弾丸や敵をクリアして自機を最初の位置に戻します。そしてゲームを再開します。残機がゼロになったらゲームオーバーです。

敵の要塞をすべて破壊したらステージクリアです。この判定もUpdate()メソッド内でおこないます。爆発がおさまっていて、Fortresses.Count == 0のときがステージクリアです。ステージをクリアしたら要塞を配置しなおしてゲームを再開します。

ゲームオーバーになったあとやゲームの途中に[ゲーム開始]をクリックするとInitGame()が実行されます。InitGame()のなかでは IsGameOver が falseになり、スコアや残機がリセットされInitStage(0)が実行されます。InitStage(int stage)のなかで要塞が再配置されゲームが始まります。