DxLibで迷路ゲームを作ってみたかったのですが、、
Posted: 2014年2月19日(水) 01:34
自分で画面スクロール型で記号*が動いて見えるような迷路ゲームを試しに作ってみたくて
コードを書いたのですが、初心者すぎてどこが間違っているのかわからなくて困っています。
ちょっと長いですが、いろいろ間違っている予感がしますが、よろしければ間違いをおしえてくださいm(_ _)m
コードを書いたのですが、初心者すぎてどこが間違っているのかわからなくて困っています。
ちょっと長いですが、いろいろ間違っている予感がしますが、よろしければ間違いをおしえてくださいm(_ _)m
#include <DxLib.h>
char key[256]; // ↓ 迷路の全体図で、0が通れて1が通れないようにしたい
int map[53][43]={ 1,1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1,1,
1,1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1,1,
1,1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 1,1,1,1, 1, 1,1,1,1, 1, 0,0,0,0, 1, 0,0,0,0, 1, 1,1,1,1, 1, 1,1,1,1, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 1,1,1,1, 1, 1,1,1,1, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 1,1,1,1, 1, 1,1,1,1, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 1,1,1,1, 1, 1,1,1,1, 1, 0,0,0,0, 1, 0,0,0,0, 1, 1,1,1,1, 1, 1,1,1,1, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1,1,
1,1, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 1,1,1,1, 1, 1,1,1,1, 1, 0,0,0,0, 1, 0,0,0,0, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 0, 0,0,0,0, 1,1,
1,1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1,1,
1,1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1, 1,1,1,1, 1,1
};
int chara[5][5]; //1マス128*128サイズで ウィンドウ画面にはおよそ25マス分が映るようにしたい *が中央に位置する
int X=50,Y=2; // 記号*のmap[53][43]上での初期位置 ちなみにゴールはまだ設定していない
void gpKeyStateAll(){ //全キー入力情報 関数①
char a[256];
GetHitKeyStateAll(a);
for(int i=0;i<256;i++){
if(a[i]==1)
key[i]++;
else
key[i]=0;
};
}
void def(int chara[][5]){ // 中央の記号*の周りの25マスをmapから定義する 関数②
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
*(chara[i]+j)=map[X-i-2][Y-j-2];
}
int MovableJudge(){ //各方向に進もうとするとき直後のマスが0になっているかを判断したい 関数③
if(key[KEY_INPUT_UP]==1 && chara[1][2]==0)
return 0;
if(key[KEY_INPUT_DOWN]==1&&chara[3][2]==0)
return 1;
if(key[KEY_INPUT_RIGHT]==1&&chara[2][3]==0)
return 2;
if(key[KEY_INPUT_LEFT]==1&&chara[2][1]==0)
return 3;
else
return-1;
}
void SetScreen(int *p,int *q){ //関数③の戻り値を受けて 記号の周り25マスを再定義 関数④
switch( MovableJudge()){
case 0:
*q-=1;
def(chara);
break;
case 1:
*q+=1;
def(chara);
break;
case 2:
*p+=1;
def(chara);
break;
case 3:
*p-=1;
def(chara);
break;
case -1:
def(chara);
break;
};
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ //main関数
ChangeWindowMode(TRUE),DxLib_Init(),SetDrawScreen( DX_SCREEN_BACK );
int color=GetColor(255,255,255);
SetFontSize(128);
while(ProcessMessage()==0&&ScreenFlip()==0&&ClearDrawScreen()==0){
//計算フェイズ
def(chara);
gpKeyStateAll();
int MovableJudge();
void SetScreen(int &X,int &Y);
//描画フェイズ
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
if(chara[i][j]==1)
DrawBox(i*128,j*128,(i+1)*128,(j+1)*128,color,TRUE); // 画面で1の通れないところを白で塗る
DrawFormatString(256,256,color,"*"); //記号は画面中央で固定
};
DxLib_End();
return 0;
}