# 第23回開始用プロジェクト

第22回の標準到達状態です。第23回では、棘、敵接触、ゲーム状態、リトライを追加します。

Stageは第15回から、CSVの全セル値を`StageCell`で名前付きにし、プレイヤー開始位置、ゴール、敵配置と地形セルを読み分けています。レンガと苔石の2種類は同じ描画・衝突処理で扱われます。Enemyも地形の画像種類を意識せず、`Stage::IsSolidAtRect()`などの問い合わせだけを利用します。

## 第22回で追加した機能

- `EnemyState`による巡回中・撃破済みの状態管理
- 敵の速度、重力、端数蓄積、横・縦方向の地形衝突
- 壁または足場の端での巡回方向の反転
- `EnemyManager::Update()`による敵集合の更新
- F1デバッグ表示への敵命中矩形の追加

## 調整値

`Source/Platformer/Tuning/GameTuning.h`で、次の値を独立して調整できます。

| 名前 | 役割 |
| --- | --- |
| `enemy::DrawRect` | 敵画像の表示範囲 |
| `enemy::Hitbox` | プレイヤーや地形との判定範囲 |
| `enemy::MoveSpeed` | 巡回速度 |
| `enemy::Gravity` | 敵へ加える重力 |
| `enemy::MaxFallSpeed` | 最大落下速度 |

画像ファイルのピクセル数、表示範囲、判定範囲は互いに独立しています。タイルの`TileSize`だけは、ステージのワールド座標と地形判定を定義するグリッド単位として共通利用します。

## 操作

| キー | 操作 |
| --- | --- |
| 左右矢印 | 移動 |
| Z | ジャンプ |
| F1 | デバッグ表示の切り替え |
| Esc | 終了 |

## 次回への引き継ぎ

この段階ではEnemyとPlayerをまだ相互作用させません。第23回では、先に棘トラップと`GameState::GameOver`を接続し、その後で敵を踏む処理と横・下方向からの接触を同じゲーム進行へ接続します。一時的な「接触したら再配置する」処理は挟みません。

Debug・Releaseのビルド後には、プロジェクト直下の`Assets`が出力先へ自動コピーされます。編集する素材はプロジェクト直下の`Assets`だけにしてください。
