c++实现贪食蛇

今天老师布置了作业 让我们观察c++实现贪食蛇的代码

#include<windows.h>  
#include<time.h>  
#include<stdlib.h>  
#include<conio.h>  
#define N 21  
#include<iostream>  
using namespace std;   
void gotoxy(int x,int y)//位置函数  
{  
COORD pos;  
pos.X=2*x;  
pos.Y=y;  
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);  
}  
void color(int a)//颜色函数  
{  
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);  
}  
void init(int apple[2])//初始化函数(初始化围墙、显示信息、苹果)  
{  
int i,j;//初始化围墙  
int wall[N+2][N+2]={{0}};  
for(i=1;i<=N;i++)  
{  
for(j=1;j<=N;j++)  
wall[i][j]=1;  
}  
color(11);  
for(i=0;i<N+2;i++)  
{  
for(j=0;j<N+2;j++)  
{  
if(wall[i][j])  
cout<<"";  
else cout<<"" ;  
}  
cout<<endl;  
}  
gotoxy(N+3,1);//显示信息  
color(20);  
cout<<"按 W S A D 移动方向"<<endl;  
gotoxy(N+3,2);  
color(20);  
cout<<"按任意键暂停"<<endl;  
gotoxy(N+3,3);  
color(20);  
cout<<"得分:"<<endl;  
apple[0]=rand()%N+1;//苹果  
apple[1]=rand()%N+1;  
gotoxy(apple[0],apple[1]);  
color(12);  
cout<<""<<endl;  
}  
int main()  
{  
int i,j;  
int** snake=NULL;  
int apple[2];  
int score=0;  
int tail[2];  
int len=3;  
char ch='p';  
srand((unsigned)time(NULL));  
init(apple);  
snake=(int**)realloc(snake,sizeof(int*)*len);  
for(i=0;i<len;i++)  
snake[i]=(int*)malloc(sizeof(int)*2);  
for(i=0;i<len;i++)  
{  
snake[i][0]=N/2;  
snake[i][1]=N/2+i;  
gotoxy(snake[i][0],snake[i][1]);  
color(14);  
cout<<""<<endl;  
}  
while(1)//进入消息循环  
{  
tail[0]=snake[len-1][0];  
tail[1]=snake[len-1][1];  
gotoxy(tail[0],tail[1]);  
color(11);  
cout<<""<<endl;  
for(i=len-1;i>0;i--)  
{  
snake[i][0]=snake[i-1][0];  
snake[i][1]=snake[i-1][1];  
gotoxy(snake[i][0],snake[i][1]);  
color(14);  
cout<<""<<endl;  
}  
if(kbhit())  
{  
gotoxy(0,N+2);  
ch=getche();  
}  
switch(ch)  
{  
case 'w':snake[0][1]--;break;  
case 's':snake[0][1]++;break;  
case 'a':snake[0][0]--;break;  
case 'd':snake[0][0]++;break;  
default: break;  
}  
gotoxy(snake[0][0],snake[0][1]);  
color(14);  
cout<<""<<endl;  
Sleep(abs(200-0.5*score));  
if(snake[0][0]==apple[0]&&snake[0][1]==apple[1])//吃掉苹果后蛇分数加1,蛇长加1  
{  
score++;  
len++;  
snake=(int**)realloc(snake,sizeof(int*)*len);  
snake[len-1]=(int*)malloc(sizeof(int)*2);  
apple[0]=rand()%N+1;  
apple[1]=rand()%N+1;  
gotoxy(apple[0],apple[1]);  
color(12);  
cout<<""<<endl;  
gotoxy(N+5,3);  
color(20);  
cout<<score<<endl;  
}  
if(snake[0][1]==0||snake[0][1]==N||snake[0][0]==0||snake[0][0]==N)//撞到围墙后失败  
{  
gotoxy(N/2,N/2);  
color(30);  
cout<<"失败!!!"<<endl;  
for(i=0;i<len;i++)  
free(snake[i]);  
Sleep(INFINITE);  
exit(0);  
}  
}  
return 0;  
} 

代码运行截图:

 

posted @ 2017-11-06 21:23  橘柑之味  阅读(1323)  评论(1编辑  收藏  举报