C++/DXライブラリで2Dプラットフォーマーを作る
C++とDXライブラリで、横スクロール型の2Dプラットフォーマー(ジャンプアクションゲーム)を制作します。シューティング教材とは別のプロジェクトから始められます。
重力加速度、加減速運動、タイルマップとの軸分離衝突判定、カメラ追従、敵の巡回移動、ジャンプの入力補正などを段階的に学び、アクションゲームの基本構造を組み立てていきます。
完成するゲーム
プレイヤーキャラクターを操作して左右の足場を進み、巡回する敵やトゲトラップを回避しながら、ステージ最深部にあるゴールフラッグを目指します。
敵は空中から踏みつけることで倒せますが、側面や下から接触するとミスになります。
| 操作キー | 動作内容 |
|---|---|
| ← → | 左右移動(加速度と摩擦を適用) |
| Z | ジャンプ(短押しで低く、長押しで高く跳ぶ) / 決定 / リトライ |
| T | 結果画面(クリア / ゲームオーバー)からタイトル画面へ戻る |
| F1 | 当たり判定・地形境界・内部デバッグ情報の表示切り替え |
| Esc | ゲームの終了 |
始める前に
C++の変数・条件・繰り返し・関数と、クラスのメンバーへのアクセス、入力・更新・描画の流れを使います。シューティング教材の受講や完成物は必須ではありません。
変数や関数を確認したい場合は、変数の利用と引数と戻り値を参照してください。クラスとゲームループは、プレイヤーの表示と操作でも確認できます。
最初から制作するときは新作プロジェクトとゲームの土台から始めます。第13〜24回は授業で使う番号です。途中の回から始める場合も、下の一覧で題名を選び、開始用プロジェクトを利用できます。
この教材で身につけること
- 画像リソースと描画順: 画像を管理する
ImageManagerを使い、背景、ゲーム世界、UIを正しい順序で描画する - 座標系とカメラ: ゲーム内の絶対空間(ワールド座標)と画面上の描画位置(スクリーン座標)を分離し、プレイヤーに追従するカメラを実装する
- 物理運動: 加速度、摩擦、重力、最大落下速度、および整数化で失われる1ピクセル未満の移動を持ち越す移動端数(Remainder)の扱いを理解する
- 衝突判定(軸分離): 横移動と縦移動を個別に解決することで、角での不自然な押し戻しやすり抜けを防ぐ
- データ駆動のステージ設計: CSVファイルからステージを動的に生成し、タイル定義テーブルによって既存コードを変更せずに新しいブロックやトラップを追加する仕組みを学ぶ
- 操作性の向上: 可変ジャンプ、足場を離れた直後の猶予時間(コヨーテタイム)、着地前の先行入力など、操作感を整える入力補正を実装する
- 敵の巡回移動: 重力と地形衝突に従い、壁や足場の端(崖)を検知して方向を切り替える巡回処理を実装する
- ゲーム進行管理: タイトル、プレイ中、クリア、ゲームオーバーの画面遷移(有限ステートマシン)を構築し、リセット処理や音声再生を整理する
- 配布パッケージの作成: Release構成でビルドを行い、開発環境外でも単独で動作する配布用フォルダをまとめる
授業の流れ(全12回)
- 第13回 新作プロジェクトとゲームの土台
- 第14回 調整できるプレイヤー表示と操作
- 第15回 CSVから作るステージ
- 第16回 ワールド座標とカメラ
- 第17回 加速度、摩擦、移動の端数
- 第18回 重力、ジャンプ、着地
- 第19回 地形との衝突解決
- 第20回 アニメーションと音声イベント
- 第21回 敵の配置とジャンプ操作の改善
- 第22回 敵の物理と巡回状態
- 第23回 トラップとゲーム進行
- 第24回 地形の種類追加と作品の完成
アーキテクチャの全体像
ゲーム統括層(Game)が全体の進行と描画順序を管理し、キャラクターの物理や地形衝突の具体的な計算は各担当クラスへ委譲します。
制作環境と配布プロジェクト
本教材は Visual Studio 2026、C++17、および DXライブラリ を使用します。環境構築の手順を確認する場合は、DXライブラリの導入と設定ガイド(PDF)を参照してください。
各回の開始時に使用するプロジェクトは 配布ファイル一覧 からダウンロードできます。前の回の完成物がなくても、その回の開始用プロジェクトから参加できます。制作中のプロジェクトが正常に動く場合は、自分の変更を引き継いで進めても構いません。