Skip to content
第07回 ゲームの状態と終了条件

3 / 4 リセットと結果画面を追加する

このステップの目的

ゲーム開始時に既存のオブジェクトを初期化し、結果画面から再開できるようにする

StartGameへ初期化を集める

リトライ時にPlayerや各Managerを個別に初期化すると、呼び出し漏れが起こります。 ゲームを開始する処理をStartGame()へ集め、既存のReset()を順番に呼びます。

Game.cppcpp
void Game::StartGame()
{
    player.Reset();
    playerShots.Reset();
    enemies.Reset();
    enemyShots.Reset();
    playTime = 0.0f;
    timeLeft = tuning::game::TimeLimit;
    score = 0;

    ChangeState(State::Playing);
}

ここで新しい初期化方式を作るのではなく、第02〜06回で各クラスへ用意したReset()を利用します。

結果を表示する

GameClearGameOverでは、最後のプレイ画面を背景に残し、その上へ結果を描きます。 プレイ中の状態を別のデータへコピーせず、現在のオブジェクトを描画します。

チェックリスト
  • リトライでPlayerとすべてのManagerが初期化される
  • 得点と残り時間が開始値へ戻る
  • クリアとゲームオーバーを別の結果として表示できる