ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

マップデータの持ち方

ステージのマップデータを配列で持とうとして、1次元で持つか2次元で持つかちょっと悩む。

int MapWidth = 20;
int MapHeight = 20;

// 1次元
int map[MapWidth * MapHeight];

// 2次元
int map[MapWidth][MapHeight];

1次元で持つとx座標とy座標から配列のインデックスを計算して求める必要がある。2次元ならそのままでいい。でもマップデータ全体を扱うとき、たとえばコピーするような場合は1次元のほうが扱いやすい。
今回は1次元で持つことに決定。座標からインデックスを求めるのはマクロかインライン関数にしてしまえばいいし。

#define POS((x),(y)) ((y)*MapWidth+(x))

int pos(int x, int y) { return y*MapWidth+x; }

あと2次元配列はどっちがxでyなのか良く分からなくなってしまうので苦手というのもある。