お疲れ様です。
本日は、本(『ゲームプログラマになる前に』)を見て勉強しているのですが、
調べても意味が分からないところがあったので、
解決したく、質問をさせていただきたいと思います。
ただ今、
『' ', '#', '.', 'o', 'O', 'p', 'P'』
という文字を扱い、コンソール上に描画するという関数を上記の本を見ながら、
作成し、処理も走ったのですが、
以下の(???のコメント部分)意味が分からず、教えていただきたいと考え記述しました。
// 描画する関数
void draw(const Object* state, int width, int height){
// Object列挙型の順の通り、配列に格納
const char font[/url] = {' ', '#', '.', 'o', 'O', 'p', 'P'};
// 2次元配列でfontの配列を出力している
for (int y = 0; y < height; ++y){
for (int x = 0; x < width; ++x){
// state(列挙型で定義済み)の配列から出力する位置を取得???←ココです。
Object o = state[ y*width + x ];
// fontの値を出力
cout << font[ o ];
}
cout << endl;
}
}
上記の関数は、main関数からdrawを呼び出し、コンソール上に描画する関数です。
質問の内容は、???のコメントの後の、
Object型の『o』にマスのstateの配列を代入した後に、
ナゼ、fontの要素に『o』を指定したら、各文字が選べるのか分からないということです。
分かりません。。
どうかよろしくお願いいたします。
また、下記が描画するデフォルトと列挙型のObject定義となっています。
// #壁 _空間 .ゴール oブロック p人
const char gStageData[/url] = "\
########\n\
# .. p #\n\
# oo #\n\
# #\n\
########";
const int gStageWidth = 8; // ステージの横幅
const int gStageHeight = 5; // ステージの高さ
// 列挙型の定義(列挙された値はint型と同じ)
enum Object{
OBJ_SPACE,
OBJ_WALL,
OBJ_GOAL,
OBJ_BLOCK,
OBJ_BLOCK_ON_GOAL,
OBJ_MAN,
OBJ_MAN_ON_GOAL,
OBJ_UNKNOWN,
};
// 状態配列確保(列挙型のObjectを1次元配列として扱うためnewで動的なメモリを確保する)
Object* state = new Object[ gStageWidth * gStageHeight ];