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