Skip to content

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

前回までで、プレイヤーが敵を倒し、敵弾でダメージを受けるところまで完成しました。 今回は、タイトル、プレイ中、ゲームクリア、ゲームオーバーを追加します。

これらの画面をGame::Stateで表し、ゲーム全体の進行を明確にします。

配布プロジェクト

前回の作業が完了した状態と同等のプロジェクトを配布します。 第07回のプロジェクトを展開し、ShootingGame2D.slnをVisual Studio 2026で開いてください。

この回のゴール

授業終了時には、タイトルからプレイを開始し、ゲームクリアまたはゲームオーバーまで状態を切り替えられるようにします。

  • enum class Stateでゲーム画面の種類を表す
  • 状態ごとに更新と描画を分ける
  • 状態へ入った瞬間の処理をChangeState()へ集める
  • リトライ時にPlayer、Manager、得点、時間を初期化する

今回のポイント

これまでのゲームは、開始するとすぐにプレイ中の処理を実行していました。 このまま画面を増やすと、入力、更新、描画の条件がGameの中に増えてしまいます。

そこで、状態ごとの処理をGame::Stateで分けます。 これまでのプレイ中の処理はUpdatePlaying()DrawPlaying()へ移しますが、ゲームの動きを作り直すわけではありません。 既存の処理を「プレイ中」という状態の責任へ名前づけする作業です。

処理の流れ
Title
決定入力
Playing
Playing
得点または時間
GameClear
Playing
HPが0
GameOver
GameClear
リトライ
Playing
GameClear
戻る入力
Title
GameOver
リトライ
Playing
GameOver
戻る入力
Title

今回実装する範囲

区分内容
新しく実装する処理State、状態遷移、タイトル、結果画面、制限時間、リトライ
既存の処理を維持するPlayer、各Manager、命中判定、HP、無敵時間
次の回で扱う処理画像・音声Managerの仕組みの読み直し、演出

今回の完成例

まず自分の実装を動かしてから、第08回の配布プロジェクトを完成例として比較します。

確認するファイル確認する内容
Game.hStateと状態ごとの関数の宣言
Game.cpp状態ごとの更新・描画、遷移条件、StartGame()の初期化