1 / 4 CSVの数値とStageCellの対応
CSVの数値が何を表すかを読み取り、配置を変えたときの表示を予想します。配布済みの StageCell と入力検査の役割を確認します。
CSVに記録する配置
Assets/Maps/Stage01.csv をテキストエディタで開きます。カンマで区切られた数値が横一列のマスに対応し、改行すると次の段へ進みます。すべての行のマス数をそろえます。
2,0,1
10,10,11この例は、上段にプレイヤー開始位置・空白・ゴール、下段にレンガ・レンガ・苔石を並べています。まだ重力や地形衝突は扱わないため、この回では配置と表示を確かめます。
数値に名前を付けるStageCell
プログラムで cell == 10 と書くと、10が何を表すかを覚えておく必要があります。配布済みの Source/Platformer/Stage.h では、列挙型 StageCell で数値に名前を付けています。次は既存コードの抜粋です。
enum class StageCell : int
{
Empty = 0,
Goal = 1,
PlayerSpawn = 2,
Brick = 10,
Moss = 11,
};コードでは StageCell::Brick と書くことで、レンガを扱うと分かります。CSVには引き続き数値の 10 を記録します。
番号はCSVとコードの約束なので、既存の値を変えません。値を明示せず自動採番に任せると、途中への項目追加で後続の番号が変わることがあります。ここでは値を明示し、10番台を地形に使っています。敵やトラップの値は、それを扱う回で追加します。
名前と入力検査の役割
enum class に名前を定義するだけでは、CSVの不正な値を拒否できません。static_cast<StageCell>(37) は、37が定義されていなくても変換できます。
そこで、配布済みの Stage.cpp の TryParseStageCell が、空白・ゴール・開始位置、または地形の定義表に登録された値かを調べます。今回受け付ける値は 0、1、2、10、11 です。
ただし、レンガを置くつもりで有効な値の 1 を入力した場合、入力検査では意図の違いを判断できません。数値として使えるかはプログラムで調べ、配置が意図どおりかは表示して確かめます。
配置の読み取り
先ほどの2行の例で、最後の 11 を 10 へ変えると、どのマスの何が変わるでしょうか。さらに 37 へ変えた場合との違いを説明してください。実際の表示とエラーの確認は、描画を接続した後に行います。
- CSVの行・列と画面上のマスの対応を説明できる
-
StageCell::BrickとCSVの10が同じ種類を表すと分かる - 未定義値の検査と、意図した配置の確認を区別できる