今RPGのゲームを作っているのですが、マップの切り替え処理に
つまずいているので質問させていただきに来ました。
RPGのゲーム(とは限らないとは思いますが)ではマップ⇔ダンジョンのマップ切り替えがよくあると思います。
フィールドマップを表す配列とは別に
int dungeon_map[3][5][5]={
{0,0,0,0,0
0,2,1,1,0
0,1,1,1,0
0,1,1,1,0
0,4,0,0,0},
{0,0,0,0,0
0,3,1,1,0
0,1,1,1,0
0,1,1,2,0
0,0,0,0,0},
{0,0,0,0,0
0,1,1,1,0
0,1,1,1,0
0,1,1,3,0
0,0,0,0,0},
}
0:通行不可 1:通行可 2:上の階へ 3:下の階へ 4:フィールドマップへ
というマップデータとして、マップの切り替えが起こった時の処理に悩んでいます。マップが切り替わったとき、自キャラの座標をどこかに格納しておけば、
マップが切り替わった後(特にマップ⇔ダンジョン)の描画する自キャラの位置を特定できると思うのですが、
今困っているのは、自キャラを操作するプログラムなんです。
現段階での自キャラのあたり判定のプログラムはこうです。
int can_or_cannot(int x,int y,int muki){//進めるかを判定する
if(muki==0){//上向きなら
if(field_map1[y/32-1][x/32]==0 || (field_map1[y/32-1][x/32]==2 && ch.st!=3)){//進めるか判定
return 1;//エラー
}
}
if(muki==1){//左向きなら
if(field_map1[y/32][x/32-1]==0 || (field_map1[y/32][x/32-1]==2 && ch.st!=3)){
return 1;
}
}
if(muki==2){//下向きなら
if(field_map1[y/32+1][x/32]==0 || (field_map1[y/32+1][x/32]==2 && ch.st!=3)){
return 1;
}
}
if(muki==3){//右向きなら
if(field_map1[y/32][x/32+1]==0 || (field_map1[y/32][x/32+1]==2 && ch.st!=3)){
return 1;
}
}
return 0;//正常
}
見ての通り、フィールドマップの時にしか対応できないプログラムなんです。これをダンジョンのような別のマップ上でも対応できるにはどのようにしたらいいでしょうか?
switch文で、場合分けするのもコードが無駄に長くなりそうですし・・・
なにか良い案はないでしょうか?
開発環境はVC++2008 EEです。