贪吃蛇(2).2

贪吃蛇(2).2,第1张

在updateWithInput() 函数中按a、s、d、w键改变moveDirection

判断游戏结束的条件

#include
#include
#include
#include 


#define High 20         //游戏画面尺寸 
#define Width 30


// 全局变量	
int moveDirection;       //小蛇移动的方向,上下左右分别用1234表示
int canvas[High][Width]={0};     //二位数组存储游戏画布中对应的元素 
     //0为空格,-1为边框#,1为蛇头@,大于1的正数为蛇身* 

void gotoxy(int x,int y)
{
	HANDLE handle =GetStdHandle(STD_OUTPUT_HANDLE);  //handle把手 
	COORD pos;
	pos.X=x;
	pos.Y=y;
	SetConsoleCursorPosition(handle,pos);  //pos销售点 
}

//移动小车

//第一部扫描数组canvas的所有元素,找到正数元素都加1
//找到最大元素(即蛇尾巴),把其变为0
//找到等于2的元素(即蛇头),根据输出的上下左右方向把对应的另一个像素值
//   设为1(新蛇头)	

void moveSnakeByDirection()
{
	int i,j;
	for(i=1;i0)
			   canvas[i][j]++;
			   
	int oldTail_i,oldTail_j,oldHead_i,oldHead_j;
	int max=0;
	
	for(i=1;i0)
			{
				if(max0||canvas[newHead_i][newHead_j]==1) 
	{
		printf("游戏失败!\n");
		exit(0);
	}	
	else
		canvas[newHead_i][newHead_j]=1; 
 } 
 
 
 void startup()    //数据初始化  startup启动 
{
	int i,j;
	
	//初始化边框 
	for(i=0;i1)
				printf("*");      //输出蛇身 
		}
		printf("\n");
	}
	Sleep(100);    //system(“cls”)是将控制台清屏。


//sleep(100)是指,“休息”100毫秒之后接着运行下面的东西 } void updateWithoutInput() //与用户输入无光的更新 { moveSnakeByDirection(); } void updateWithInput() //与用户输入有关的更新 { char input; if(kbhit()) //判断是否有输入 { input=getch(); //根据用户的不同输入来移动 if(input=='a') //不需要输入回车 { moveDirection=3; //位置左移 moveSnakeByDirection(); } else if(input=='d') { moveDirection=4; //位置右移 moveSnakeByDirection(); } else if(input=='w') { moveDirection=1; //位置上移 moveSnakeByDirection(); } else if(input=='s') { moveDirection=2; //位置下移 moveSnakeByDirection(); } } } int main() { startup(); while(1) { show(); //显示画面 updateWithoutInput(); //与用户数输入无关的更新 updateWithInput(); //与用户输入有关的更新 } return 0; }

运行结果

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/562395.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-01
下一篇 2022-04-01

发表评论

登录后才能评论

评论列表(0条)

保存