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

1 / 4 ゲームの状態を表す

このステップの目的

ゲーム画面の種類を列挙型で表し、現在の状態に応じて処理を選べるようにする

Stateをenum classで定義する

画面の種類を整数や文字列で管理せず、enum class Stateへまとめます。 列挙子を限定できるため、状態として扱える値が明確になります。

Game.hcpp
enum class State
{
    Title,
    Playing,
    GameClear,
    GameOver
};

State state = State::Title;

状態ごとの更新を分ける

これまでのプレイ処理はUpdatePlaying()へ移します。 Playerや各Managerの処理内容は変更せず、Update()から現在の状態に応じて呼び出します。

編集は次の順番で進めます。

  1. Game.hStateの列挙と状態ごとの関数を宣言する。
  2. Game.cppの既存の更新処理をUpdatePlaying()へ移す。
  3. Game.cppの既存の描画処理をDrawPlaying()へ移す。
  4. Update()Draw()switchから状態ごとの関数を呼ぶ。

Player、弾、敵のクラス内部は変更しません。最初に処理を移し、動作が同じことを確認してからタイトルと結果画面を追加します。

Game.cppcpp
switch (state)
{
case State::Playing:
    UpdatePlaying(deltaTime);
    break;
}

タイトルや結果画面では、プレイ中の敵や弾を更新しません。

状態ごとの担当を、次の表で確認します。

State更新する処理描画する画面主な入力
Titleタイトル入力タイトル決定で開始
PlayingPlayer、弾、敵、命中、時間プレイ画面とHUD移動、射撃
GameClear結果画面の入力最後のプレイ画面とクリア表示リトライ、タイトル
GameOver結果画面の入力最後のプレイ画面とゲームオーバー表示リトライ、タイトル

この表とUpdate()Draw()switchを照らし合わせ、各状態で処理が混ざっていないことを確認します。

チェックリスト
  • 状態をenum classで表している
  • プレイ中の既存処理をUpdatePlaying()へまとめている
  • 状態によって更新する処理を選んでいる