ページ 11

スネークゲームの作成

Posted: 2018年8月03日(金) 21:34
by ぬこ
トロンと呼ばれるスネークゲームのようなものを作成しているのですが、自分が通ったところを記録するやり方がわかりません。

//一度通ったところか判定(0以外ならゲーム終了)
if( ashiato[y][x]!=0 ){} 

これをどこに入れればよいのでしょうか? どうか助言をお願いします。

コード:

#include<windows.h>
#include<stdio.h>
void gotoXY(int x, int y);	//カーソル移動関数
void setColor( int color );	//色設定関数
int main(void){
	int x,y,houkou,ashiato[21][61],j,i;
	x = 40; y = 10; houkou=0;
	
	//二次元配列すべてにに初期化
	for(i=0; i<61; i++){
	for(j=0;j<21;j++){
		ashiato[j][i]=0;
	}
}	
	while( GetAsyncKeyState( VK_ESCAPE )==0 ){
	ashiato[y][x] = 1; 

		//自分操作
		if(houkou==0) x++;
		if(houkou==1) x--;
		if(houkou==2) y--;
		if(houkou==3) y++;
				
		if( GetAsyncKeyState(VK_RIGHT) != 0 ) houkou = 0;
		if( GetAsyncKeyState(VK_LEFT) != 0 ) houkou = 1;
		if( GetAsyncKeyState(VK_UP) != 0 )	houkou = 2;
		if( GetAsyncKeyState(VK_DOWN) != 0 ) houkou = 3;

		//画面外ループ判定↓
	    if(x > 60){  x = 0;  }
		if(x <  0){  x = 60; }

		if(y > 24){  y = 0;  }
		if(y < 0){  y = 24; }

		setColor( 0x47 );	//赤背景白文字の色設定
		gotoXY(x, y);	//x ,y位置指定
		printf("@");	//表示
		Sleep(150);
	}
	return 0;
} 		
void gotoXY( int x, int y ){
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition( GetStdHandle(STD_OUTPUT_HANDLE), pos );
	return ;
}
void setColor( int color ){
	SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE), color );
	return ;
}



Re: スネークゲームの作成

Posted: 2018年8月04日(土) 13:16
by よもやま
x,y座標ですが、移動していない状態を考慮したほうがいいですね。
初回
ashiato[y][x] = 1;
は有効ですが、変化が生じたときにも更新したほうがいいかもしれません。
あと、座標x,yは構造体にて管理し、変化の有無を検出しやすくしたほうがいいと思います。