Skip to content

第24回 地形の種類追加と作品の完成

データ駆動で設計されたタイル定義テーブルを活用し、新しい地形ブロックを追加する手順を実践します。さらに、リソースの静的・動的バリデーション、デバッグ表示を活用した通しプレイ検証、Releaseビルドの作成、および第三者に配布可能な実行パッケージ(ZIP)の作成を行い、プラットフォーマーゲームを完成させます。

配布プロジェクト

第24回の開始用プロジェクトには、第23回までのすべての機能(トラップ、敵との攻防、ゲーム進行ステートマシン)が実装されています。これまで調整してきたパラメータを残したまま、本レッスンで作品の完成とパッケージングを行います。

作業中のプロジェクトに重大な不整合が生じて修復が困難になった場合は、復帰用の完成プロジェクトを参照してコードの最終状態を確認できます。完成版をそのまま提出するのではなく、自身の手で調整や機能追加を反映させてください。

この回のゴール

  1. 新しい地形ブロック(例: 石ブロック Stone)を定義テーブルに追加し、既存の描画・衝突ロジックを変更することなくステージに反映させる
  2. static_assert による件数の一致確認と、実行時バリデーションによるID重複・空パス検出の仕組みを理解する
  3. デバッグ表示(F1キー)を活用してすべてのゲーム要素(地形・当たり判定・危険領域・状態遷移)の動作を回帰テストする
  4. Visual Studioで Release x64 ビルドを行い、開発環境外でも単独で起動する配布用フォルダ(実行ファイル・Assets・README)を作成する

今回のポイント

1. データ駆動設計による拡張性

第15回以降で構築してきた設計では、地形の描画処理や物理衝突アルゴリズムが特定のタイル種類に依存していません。新しい地形を追加する際も、既存の衝突解決コードを書き換える必要はなく、以下の4段階の定義を追加することでゲームへ組み込まれます。

地形種類を追加する流れ
画像ファイル
読み込み対象リソースとして登録
ImageId
ImageId
CSV上の数値IDに列挙型の名前を付ける
StageCell
StageCell
画像・進入可否・危険属性を関連付ける
TileDefinition
TileDefinition
新しいセル値をマップ上に配置
Stage01.csv

2. 静的・動的な二段構えのバリデーション

リソース管理の不備による実行時クラッシュを防ぐため、二重の安全策を講じます:

  • コンパイル時検査(static_assert: 列挙型の要素数(Count)と定義配列の要素数が一致しているかをコンパイル時に検証し、定義漏れを即座にエラーとして検出します。
  • 実行時検査: 起動時に配列を走査し、識別子の重複登録、ファイルパスの空文字列、範囲外アクセスなどを検証します。

3. ポータビリティの確保

開発環境のVisual Studio上だけでなく、第三者のPC環境でも問題なく起動して動作することを確認します。不要な中間ファイルやソースコードを除外し、実行ファイル・アセット一式・説明書(README)をまとめた配布パッケージを作成します。

作業の準備

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

作業対象
新規作成なし
既存ファイルへ追記・編集選んだ調整値・素材・操作説明
重点的に実装・確認する処理画像・地形定義への種類追加と配布確認

本編の完成条件は、新しい地形を加えた1ステージのゲームです。複数ステージ化は完成後に選べる発展課題です。

必要に応じて GameTuning.h の定数を調整し、追加した素材を Assets フォルダに保存します。

授業の進め方

完成条件

  • 新しい地形ブロックが既存の描画・物理判定ロジックを変更することなくステージ上に追加されている
  • 列挙型と定義テーブルの整合性がコンパイル時および実行時に検証されている
  • F1デバッグ表示を活用し、主要なゲームサイクル(操作・敵撃破・ミス・クリア・リトライ)が正常に動作することを確認できる
  • Release構成(x64)でビルドされ、プロジェクト外の独立したフォルダから単体で正常に起動する
  • 操作方法や動作要件を記した README.txt が同封された配布用ZIPが作成されている

発展課題:複数ステージへの拡張

本コースのカリキュラムは1ステージの完成をもって修了となりますが、本構成は複数ステージ化にも容易に対応できます。Stage02.csv などの追加ステージファイルを用意し、ゴール到達時に次のCSVファイルを読み込むことで、複数ステージへ拡張が可能です。ステージの幅と高さはCSVの行数・列数から自動的に取得されるため、プログラム側の固定値を書き換える必要はありません。

複数ステージ化の参考実装例は、完成プロジェクト内の Extensions/MultiStage に同梱されています。自身の作品をさらに発展させたい場合は、設計意図を読み解きながら挑戦してみてください。

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