Appearance
第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
1 / 4ゲームの状態を表すゲーム画面の種類を列挙型で表し、現在の状態に応じて処理を選べるようにする2 / 4状態遷移を集約する状態が変わる瞬間の処理を
ChangeState()へ集め、画面とゲーム進行をそろえる3 / 4リセットと結果画面を追加するゲーム開始時に既存のオブジェクトを初期化し、結果画面から再開できるようにする4 / 4ゲームの進行を確認するタイトルからプレイ、結果、リトライまでの一連の流れを確認する今回実装する範囲
| 区分 | 内容 |
|---|---|
| 新しく実装する処理 | State、状態遷移、タイトル、結果画面、制限時間、リトライ |
| 既存の処理を維持する | Player、各Manager、命中判定、HP、無敵時間 |
| 次の回で扱う処理 | 画像・音声Managerの仕組みの読み直し、演出 |
今回の完成例
まず自分の実装を動かしてから、第08回の配布プロジェクトを完成例として比較します。
| 確認するファイル | 確認する内容 |
|---|---|
Game.h | Stateと状態ごとの関数の宣言 |
Game.cpp | 状態ごとの更新・描画、遷移条件、StartGame()の初期化 |