贪吃蛇(2).2

news/2024/11/22 13:54:07/

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

判断游戏结束的条件

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h> #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;i<High-1;i++)for(j=1;j<Width-1;j++)if(canvas[i][j]>0)canvas[i][j]++;int oldTail_i,oldTail_j,oldHead_i,oldHead_j;int max=0;for(i=1;i<High-1;i++)for(j=1;j<Width-1;j++)if(canvas[i][j]>0){if(max<canvas[i][j]){max=canvas[i][j];oldTail_i=i;oldTail_j=j;}if(canvas[i][j]==2){oldTail_i=i;oldTail_j=j;}}canvas[oldTail_i][oldTail_j]=0;int newHead_i,newHead_j;if(moveDirection==1)     // 向上移动 {newHead_i=oldHead_i-1;newHead_j=oldHead_j;}if(moveDirection==2)     // 向下移动 {newHead_i=oldHead_i+1;newHead_j=oldHead_j;}if(moveDirection==3)    // 向左移动 {newHead_i=oldHead_i;newHead_j=oldHead_j-1;		}if(moveDirection==4)   // 向右移动 {newHead_i=oldHead_i;newHead_j=oldHead_j+1;		}//小蛇是否和自身撞或者和边框撞,游戏失败if(canvas[newHead_i][newHead_j]>0||canvas[newHead_i][newHead_j]==1) {printf("游戏失败!\n");exit(0);}	elsecanvas[newHead_i][newHead_j]=1; } void startup()    //数据初始化  startup启动 
{int i,j;//初始化边框 for(i=0;i<High;i++){canvas[i][0]=-1;     //最左边一趟 canvas[i][Width-1]=-1;    //最右边一趟 }for(j=0;j<Width;j++){canvas[0][j]=-1;     //最上边的一趟 canvas[High-1][j]=-1;    //做下面一趟 }canvas[High/2][Width/2]=1;    //初始化蛇头 for(i=1;i<=4;i++)canvas[High/2][Width/2-i]=i+1;    //蛇身 moveDirection=4; //初始化小蛇向右移动 
}void show()        //显示画面 ,
//用户自定义函数名,它无返回值,根据函数名,该程序应该是完成输出操作的 
{gotoxy(0,0);     //光标移动到原点位置,一下重画清屏 int i,j;for(i=0;i<High;i++){for(j=0;j<Width;j++){if(canvas[i][j]==0)printf(" ");       //输出空格 else if (canvas[i][j]==-1) printf("#");      //输出边框# else if(canvas[i][j]==1)printf("@");       //输出蛇头 else if (canvas[i][j]>1)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;
}

运行结果

 


http://www.ppmy.cn/news/287403.html

相关文章

AMD速龙经典处理器回顾

在CPU这个范畴里&#xff0c;想必大家张口就能说出他们的名字&#xff0c;没错&#xff0c;全球唯有实力的两大CPU生产商&#xff1a;INTEL和AMD。前者出生于1968&#xff0c;后者1969年诞生。那么&#xff0c;今年对于AMD来说是一个特殊的年份&#xff0c;因为它已经走过40年的…

如何看编号识真65纳米双核速龙

以目前市场上最常见的90nm/65W版本Athlon64 X2 3800处理器为例&#xff0c;这款处理器的OPN编号为“ADO3800IAA5CU”。如图标注所示&#xff0c;我们要特别关注处理器OPN编号的前缀部分。 不同的OPN编号前缀代表不同的含义&#xff0c;其中OPN编码前缀为“ADA”的产品为TDP 89W…

十年《文明2》,然后呢?核战争?我说的是然后……

前几天的新闻&#xff0c;想必大家都看到了。玩了10年的《文明2》的记录……咳&#xff0c;跑题了&#xff0c;记得几年前&#xff0c;也有一个类似的“核战争”的话题。 还记得AMD速龙之后直接转型的速龙X2吧&#xff0c;然后是胶水双核之争&#xff0c;然后就是铺天盖地的“…

amd cpu安装osx 10.9.2(同样适应intel构架)

amd cpu安装mac os 10.9.2详细步骤 本人一直在vm中运行mac os&#xff0c;一直运行的版本是mountain lion 10.8.2&#xff0c;一直还行&#xff0c;但是最新的xcode 5.0.2要更新的mac os了&#xff0c;没有办法&#xff0c;本人决定在真机安装最新版的。于是在国外看一些教程&…

龙的战争 Dragon ‘s War

题目描述 Kirito现在被困在一个MMORPG游戏当中&#xff0c;为了离开这个游戏&#xff0c;他现在必须和 条龙进行战斗&#xff0c;Kirito和这 头龙都有一个力量值&#xff0c;用整数表示&#xff0c;Kirito最初的力量值为 。如果在Kirito和第 头龙 的对决当中&#xff0c;Kir…

2.2.2 处理器(CPU)资源

最后更新2021/07/08 处理器资源有两类&#xff1a;物理CPU和虚拟CPU&#xff0c;由于在虚拟化不同层面有不同的解释&#xff0c;因此请先确认其含义。后续如无特别说明&#xff0c;与x86系列对应&#xff0c;CPU即通常说的CPU core&#xff0c;CPU封装即socket&#xff0c;通常…

JavaSE笔记(二)重制版

面向过程篇 前面我们已经认识了Java语言的相关特性&#xff0c;并且已经成功配置好了开发环境&#xff0c;从这节课开始&#xff0c;我们就可以正式进入到Java语言的学习当中了。Java语言是一门面向对象的语言&#xff0c;但是在面向对象之前&#xff0c;我们还得先学会如何面…

速龙641电脑装机 硬件 参数 BIOS参数调整

2012.3.6.新装机配置 1.主板&#xff1a;映泰TA75M 549元 2.CPU: 速龙IIx4 641 479元 3.内存&#xff1a;芝奇DDR3 2133 8G(4G2条) 499元 4.电源&#xff1a;全汉蓝爆炫动版450额度400W 249元 5.显卡&#xff1a;蓝宝…