EL-ZELKさん始めまして、DXライブラリの管理人です。
Promethuesさんが既にご返信されていますが私も一応・・・
1.市販されているアクションゲームのような縦横にかなり広めのマップも、
”1つの”配列にマップの全データをずらっと記述する。
画面の切り替え(マップ移動やステージクリアなど)が入らない範囲では
一つの配列だと思いますが、何らかの事情があれば複数の配列に
分ける(128x128マスで1ブロック(1配列)それが縦横8ブロックづつある、など)
かもしれません。
とはいえ市販の2Dゲームの中身を見たことがないので実際はどうなって
いるのかはわかりません。
2.マップチップに床A・床B・柱…など複数用いたい場合、
配列を0,0,2,1,3,……のようにし、
0の時は壁なし、1の時は床A、2のときは床B…
などとチップの種類の分だけ数字を用意し、数字に応じて対応チップを描写させる。
はい。 ただ、場合分けを switch や if で行うと種類が増えれば増えるほど
処理が重くなってしまうので、int型配列に各数値に対応した画像ハンドルを
LoadDivGraph で読み込んでおいて、描画時は種類番号の配列要素を描画関数に
渡すだけで描画画像を変更出来るようにします。
〜〜〜〜読み込み処理〜〜〜〜〜
int ChipGraph[64];
// ChipImage.bmp は32x32サイズのチップの画像が縦横8個づつあるとします
LoadDivGraph( "ChipImage.bmp", 64, 8, 8, 32, 32, ChipGraph );
〜〜〜〜実際にマップを描画するとき〜〜〜〜
for( i = 0; i < マップの縦幅 ; i++ )
for( j = 0; j < マップの横幅 ; j++ )
DrawGraph( j * 32, i * 32, ChipGraph[ MapData[i][j] ], FALSE );
ちなみに説明の中で LoadDivGraph 関数で読み込んでいる画像は 32x32 サイズの
チップを縦横8個づつ、つまり 256x256 の大きさの画像となっていますが、これは
LoadDivGraph で読み込む画像が2のn乗(2,4,8,16,32,64,128,256,512,1024,2048)
のサイズを持つ場合、LoadDivGraph で読み込んだ一つの画像に書かれたチップを
連続して描画するとチップが一つづつ別の画像になっている場合より高速に描画
出来るからです。