代码如下:
#include<iostream>
#include <conio.h>
#include<time.h>
using namespace std;
int m,n,k,l; //(m,n)为贪吃蛇的头坐标,(k,l)为小虫子的坐标;
int length=1; //贪吃蛇的长度;
int she[100][2]; //贪吃蛇各截的坐标,其中(she[0][0],she[0][1])表示头坐标;
bool flag=true,flag2=true; //用来判断是否撞墙;
void init(char a[32][36]){ //初始化界面;
int i,j;
for(i=0;i<32;i++)
strcpy(a[i],"█████████████████");
for(i=1;i<31;i++)
for(j=2;j<32;j++)
a[i][j]=' ';
}
void print(char a[32][36]){ //打印界面;
int i,j;
for(i=0;i<length;i++) //根据数组 she 将此时贪吃蛇的位置设为“*”;
a[she[i][0]][she[i][1]]='*';
a[k][l]='*'; //将此时虫子的位置设为“*”;
for(i=0;i<32;i++){ //打印;
for(j=0;j<34;j++)
putchar(a[i][j]);
cout<<endl;
}
}
void judge1(){ //用来判断贪吃蛇此时是否吃到了虫子;
if(m==k && n==l){ //(m,n)和(k,l)重叠,就说明此时贪吃蛇吃到了虫子;
k=1+rand()%30; //虫子被吃了,当然要重新随机显示出一个虫子;
l=2+rand()%30;
length++; //贪吃蛇吃了虫子,它也长大了一截;
}
for(int i=0;i<length;i++){//此循环是用来控制贪吃蛇移动状态的,可以看做核心代码;
she[length-1-i][0]=she[length-2-i][0];
she[length-1-i][1]=she[length-2-i][1];
}
she[0][0]=m;
she[0][1]=n;
while(1){ //用来判断新生成的虫子是否在贪吃蛇上,如果是则重新生成;
int flag=1;
for(int i=0;i<length;i++){
if(she[i][0]==k && she[i][1]==l){
k=1+rand()%30;
l=2+rand()%30;
flag=0;
}
}
if(!flag)
continue;
else
break;
}
}
int judge2(){ //判断蛇头是否装上蛇身;
for(int i=1;i<length;i++)
if(she[0][0]==she[i][0] && she[0][1]==she[i][1])
return 0;
return 1;
}
int main(){
char a[32][36],c;
init(a);
srand(time(NULL));
she[0][0]=m=2;
she[0][1]=n=4;
while(1){
k=1+rand()%30;
l=2+rand()%30;
if(k==m && l==n)
continue;
else
break;
}
print(a);
while(1){
flag2=true;
switch(_getch()){
case 0x4B:
case 'a':
if(n==2){ //蛇头撞墙;
cout<<"GAME OVER!"<<endl;
flag=false;
break;
}
else{
system("cls");
if(she[0][1]==she[1][1]+1){ //蛇身长大于1时不能回头跑;
flag2=false;
break;
}
n--;
judge1();
if(!judge2()){ //蛇头装上蛇身;
cout<<"GAME OVER!"<<endl;
flag=false;
break;
}
init(a);
print(a);
}
break;
case 0x4d:
case 'd':
if(n==31){ //蛇头撞墙;
cout<<"GAME OVER!"<<endl;
flag=false;
break;
}
else{
system("cls");
if(she[0][1]==she[1][1]-1){ //蛇身长大于1时不能回头跑;
flag2=false;
break;
}
n++;
judge1();
if(!judge2()){ //蛇头装上蛇身;
cout<<"GAME OVER!"<<endl;
flag=false;
break;
}
init(a);
print(a);
}
break;
case 0x48:
case 'w':
if(m==1){ //蛇头撞墙;
cout<<"GAME OVER!"<<endl;
flag=false;
break;
}
else{
system("cls");
if(she[0][0]==she[1][0]+1){ //蛇身长大于1时不能回头跑;
flag2=false;
break;
}
m--;
judge1();
if(!judge2()){ //蛇头装上蛇身;
cout<<"GAME OVER!"<<endl;
flag=false;
break;
}
init(a);
print(a);
}
break;
case 0x50:
case 's':
if(m==30){ //蛇头撞墙;
cout<<"GAME OVER!"<<endl;
flag=false;
break;
}
else{
system("cls");
if(she[0][0]==she[1][0]-1){ //蛇身长大于1时不能回头跑;
flag2=false;
break;
}
m++;
judge1();
if(!judge2()){ //蛇头装上蛇身;
cout<<"GAME OVER!"<<endl;
flag=false;
break;
}
init(a);
print(a);
}
break;
default:break;
}
if(!flag2)
print(a);
if(!flag)
break;
}
system("pause");
return 0;
}