Skip to content

第23回 トラップとゲーム進行

第22回では、敵キャラクターの物理運動と巡回移動を実装しました。
第23回では、接触するとミスになるトゲトラップ(Spike)、敵との攻防判定(踏みつけ撃破と被弾)、落下判定、およびゲーム全体の進行状態を管理するステートマシン(GameState)を実装します。

配布プロジェクト

第23回の開始用プロジェクトを展開し、PlatformerGame2D.sln を Visual Studio 2026 で開いてください。
第22回の敵巡回処理と地形衝突処理が含まれたプロジェクトから開始します。

配布ファイル一覧
ファイル役割
Source/Platformer/Stage.cppトゲタイルの危険判定(isHazard)の管理
Source/Platformer/Game.h / Game.cppGameState の状態遷移、敵との当たり判定、リトライ処理
Source/Platformer/Tuning/GameTuning.hトゲの危険判定矩形(余白調整)、踏みつけ時の跳ね返り初速

この回のゴール

トゲトラップ、敵の側面接触、ステージ最下部への落下によりゲームオーバーとなり、ゴールへの接触でクリアとなるゲームループを構築します。また、結果画面からリトライやタイトル画面への復帰ができるようにします。

  • 進入可能でありながら接触するとミスになるトゲトラップ(isHazard)を実装できる
  • プレイヤーと敵の衝突において、「上からの踏みつけ撃破」と「側面・下からの被弾」を幾何学的に判別できる
  • ステージ最下部から落下した際のミス判定を実装できる
  • GameState によるステートマシンを導入し、状態遷移に伴うステージ初期化や音声の切り替えを1箇所に集約できる

今回のポイント

1. 進入不可(isSolid)と危険領域(isHazard)の分離

トゲトラップは移動を遮る壁ではなく、接触した瞬間にミスとなる危険領域です。タイル定義に isSolid(壁・床)と isHazard(危険領域)の独立した属性を持たせることで、同じステージCSVデータから地形判定とトラップ判定を両立させます。

2. 踏みつけ撃破と被弾判定の幾何学的判別

プレイヤーと敵の当たり判定が重なった際、以下の条件で撃破か被弾かを判別します。

  • プレイヤーが落下中であること(velocity_.y > 0.0f
  • プレイヤーの足底(下端)が敵の中心高さ以下にあること

上記を満たす場合は「踏みつけ成功」として敵を撃破し、プレイヤーを上方へ小さく跳ね返らせます。満たさない接触(横や下からの接触)は被弾とし、ゲームオーバーへ遷移します。

3. ステートマシンによる進行管理

ゲームの状態遷移を GameState 列挙型で一元管理します。

図を準備しています…

状態の書き換え、ステージ初期化(ResetStage)、BGMやジングル(効果音)の切り替えを ChangeState() メソッドに集約することで、遷移に伴う処理を整理します。

作業の準備

開始用ZIPは前回までの到達状態です。今回の新規ファイルはありません。ファイルの登録方法と自分の変更の引き継ぎは、配布ファイルの手順で確認できます。

作業対象
新規作成なし
既存ファイルへ追記・編集Source/Platformer/Game.cppSource/Platformer/Game.hSource/Platformer/ImageManager.cppSource/Platformer/ImageManager.hSource/Platformer/Input.cppSource/Platformer/Input.hSource/Platformer/Player.cppSource/Platformer/Player.hSource/Platformer/SoundManager.cppSource/Platformer/SoundManager.hSource/Platformer/Stage.cppSource/Platformer/Stage.hSource/Platformer/Tuning/GameTuning.h
重点的に実装・確認する処理Game::UpdatePlaying()Game::ChangeState()Game::ResetStage()

ヘッダーの宣言、include、画像などの登録表、読み込みのエラー処理は、最終ステップの参考実装を必要に応じて利用します。重点関数は各ステップで処理の理由を確かめながら記述します。関数を変更するときは、宣言・定義・呼び出し元の整合性を保ちます。

必要に応じて GameTuning.h に定数を追加し、トラップの余白や跳ね返り初速を調整します。

第23回の目次

動作確認

  • トゲの見た目よりわずかに内側に調整された危険判定により、自然な接触判定が行われること
  • 敵を空中から踏みつけると敵が倒れてプレイヤーが跳ね上がり、横から触れるとゲームオーバーになること
  • 穴へ落下した際にゲームオーバーへ遷移すること
  • ゲームオーバーやクリア画面から、ジャンプキーでステージ初期状態へリトライできること
  • 各状態で対応するBGMやSEが適切に再生・停止されること

次回は、新しい地形画像を追加する手順を実践し、デバッグ機能の整理、Releaseビルド、配布用パッケージの作成を行います。

ゲームプログラミング実践