ページ 11

ゲーム作成で質問です。

Posted: 2010年4月22日(木) 20:35
by マッキー
お疲れ様です。

本日は、本(『ゲームプログラマになる前に』)を見て勉強しているのですが、
調べても意味が分からないところがあったので、
解決したく、質問をさせていただきたいと思います。

ただ今、
『' ', '#', '.', '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 ];

Re:ゲーム作成で質問です。

Posted: 2010年4月22日(木) 20:42
by マッキー
すいません。分かりました。

また、困った時に伺います。