贪吃蛇

来源:互联网 发布:mac开机后鼠标不能动 编辑:程序博客网 时间:2024/04/30 14:38
#include<iostream.h>#include<windows.h>#include<time.h>#include<stdlib.h>#include<conio.h>#define N 21void 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;}

0 0
原创粉丝点击