# Assets

`Background.png`は画面全体へ表示する背景画像です。地形やキャラクターとは異なり、当たり判定を持ちません。

このフォルダーは、実行時に読み込む画像、音声、ステージデータをまとめています。

```text
Assets/
  Images/
    Background.png
    Player.png
    Enemy.png
    Tile.png
    TileMoss.png
    Spike.png
    Goal.png
  Sounds/
    TitleBgm.wav
    PlayingBgm.wav
    Jump.wav
    Land.wav
    Goal.wav
    GameOver.wav
  Maps/
    Stage01.csv
```

画像と音声は完成までに使用する素材を先に同梱しています。`Stage01.csv`の値は次の意味です。

| CSV値 | `StageCell` | 意味 |
| --- | --- | --- |
| `0` | `Empty` | 空白 |
| `1` | `Goal` | ゴール |
| `2` | `PlayerSpawn` | プレイヤーの開始位置 |
| `10` | `Brick` | レンガ地形タイル |
| `11` | `Moss` | 苔石地形タイル |
| `90` | `EnemySpawn` | 第21回で追加する敵の配置位置 |

`Goal`と`PlayerSpawn`は、各ステージCSVに1つずつ置きます。どちらかがない場合や2つ以上ある場合は読み込みエラーになります。

第15回からCSV値と意味の対応を`StageCell`へ集約します。`1`～`9`は進行・ギミック、`10`～`19`は通常地形・障害物、`20`～`29`はトラップ、`90`～`99`は敵配置の値域です。整数値は配布済みCSVとの約束なので、列挙子を追加するときも既存値は変更しません。

第20回までの`Stage01.csv`には敵配置の`90`を置きません。第21回で`EnemySpawn`を実装するときに、CSVへ追加します。

値域はCSVを整理するための規約です。プログラムでは数値の範囲で種類を判断せず、`StageCell::Goal`のような名前と定義表を使います。`TryParseStageCell()`は未定義値を拒否します。

CSVを読み込めない場合は、エラー画面へ可能な限り行、列、原因を表示します。数値以外、空セル、列数不一致、未定義値、`Goal`または`PlayerSpawn`の不足・重複を区別します。

地形の種類は`StageCell`と`tileDefinitions`の対応表で管理します。新しい種類を増やす場合は、画像、`ImageId`と画像パス、`StageCell`の未使用値、タイル定義、CSVの順に登録します。地形判定は定義の`isSolid`を参照するため、描画処理や衝突処理へ種類ごとの分岐を追加する必要はありません。
