老规矩,先效果图
代码是用原生c++控制台程序编写的。这里面的算法很值得学习。
首先我们需要编写一个蛇的结构体。
struct body
{
int x,y;
body *last,*next;
body(){
last=next=NULL;}
}*head;
蛇的body里面有next为了连接蛇与蛇,然后last是为了标记蛇的尾部的。
int Rand(int l,int r)
{
return rand()%(r-l+1)+l;
}
因为蛇吃的东西是需要随机生成的,蛇一开始的位置,方向全部都是随机的,所以我们封装好一个随机函数。
需要模拟真随机需要用到
srand((unsigned)time(NULL));
这里面的地图+蛇,全部数据都写在一个二维数组里面
char map[23][53];
一开始的时候需要把墙体写好
//地图
for( i=0;i<22;i++)
for(int j=0;j<52;j++)
map[i][j]=' ';
for( i=0;i<52;i++)
map[0][i]=map[21][i]='#';
for( i=0;i<22;i++)
map[i][0]=map[i][51]='#';
需要生成蛇的位置和方向
//生成蛇的位置
srand((unsigned)time(NULL));
head=new body;
head->x=Rand(5,15),head->y=Rand(10,40);
//生成蛇的方向
d=Rand(0,3);
switch(d)
{
case 0:map[head->x][head->y]='|';map[head->x+1][head->y]='|';break;
case 1:map[head->x][head->y]='-';map[head->x][head->y+1]='-';break;
case 2:map[head->x][head->y]='|';map[head->x-1][head->y]='|';break;
case 3:map[head->x][head->y]='-';map[head->x][head->y-1]='-';break;
}
最后我们需要控制蛇体移动,这里需要写上自己的摇杆。
for(int i=0;i<=10;i++)
{
if(GetKeyState('S')<0&&d!=2)
x=0;
if(GetKeyState('D')<0&&d!=3)
x=1;
if(GetKeyState('W')<0&&d!=0)
x=2;
if(GetKeyState('A')<0&&d!=1)
x=3;
Sleep(10);
}
d=x;
eat=(map[head->x+dd[d][0]][head->y+dd[d][1]]=='*');
Update(head,head->x+dd[d][0],head->y+dd[d][1]);
eat是判断是否吃了食物。
Update就是要画出蛇的每一步。
有需要源码的话,可以后台找我。