首页 > 代码库 > c++ 贪吃蛇
c++ 贪吃蛇
#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; //WINDOWS API中定义的一个结构 表示一个字符在控制台屏幕上的坐标,坐上角(0,0) pos.X=2*x; pos.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);//实例化句柄, 重新定义X,Y 就能把光标移动到预定位置,}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}}; //一个23*23的格子 for(i=1;i<=N;i++) //1-N全部初始化为1 { 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); //为snake分配内存 for(i=0;i<len;i++) snake[i]=(int*)malloc(sizeof(int)*2); //建立一个3*3的数组 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()) // 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0 { gotoxy(0,N+2); ch=getche(); //输入后立即从控制台取字符 } switch(ch) {//snake[0][0] 表示距离y轴的距离 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位置 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<<"Game over"<<endl; for(i=0;i<len;i++) free(snake[i]); //释放内存 Sleep(INFINITE); //永远等待 exit(0); } } return 0;}
c++ 贪吃蛇
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。