首页 C/C++
贪吃蛇
发布时间:2019年11月30日 评论数:抢沙发 阅读数:330
随手写的一个贪吃蛇。别问,问就是又没有美工。 windows下才能使用
/** *1、确定棋盘,蛇 #为墙,*为蛇,$为钱 *2、键盘获取输入 *3、屏幕刷新 *4、判断逻辑 **/ #include<stdio.h> #include<stdlib.h> #include <conio.h> #include<windows.h> #define N 30 struct Snack{ //头 int x1; int y1; //尾 int x2; int y2; int flag; //1左,2上,3右,4下 }; int x3,y3; char layout[N][N]; Snack init(){ int i,j; //初始化棋盘 for(i=0;i<N;i++){ for(j=0;j<N;j++){ if(i==0||j==0||i==(N-1)||j==(N-1)){ layout[i][j] = '#'; }else{ layout[i][j] = ' '; } } } //初始化蛇 Snack s; s.x1 = rand()%(N/2)+(N/4); s.y1 = rand()%(N/2)+(N/4); s.x2 = s.x1-1; s.y2 = s.y1; s.flag = rand()%4+1; layout[s.x1][s.y1] = '*'; layout[s.x2][s.y2] = '*'; return s; } void menu(){ system("cls"); printf("--------欢迎来到贪吃蛇--------\n"); int i,j; for(i=0;i<N;i++){ for(j=0;j<N;j++){ printf("%c",layout[i][j]); } printf("\n"); } //随机出现食物 if(layout[x3][y3]!='$'){ x3 = rand()%(N*9/10)+4; y3 = rand()%(N*9/10)+4; while(layout[x3][y3]!=' '){ x3 = rand()%(N*9/10)+4; y3 = rand()%(N*9/10)+4; } layout[x3][y3] = '$'; } } //判断蛇死不死 bool move_kill(Snack &s){ if(s.flag==1){ s.y1 -= 1;//移动 if(layout[s.x1][s.y1]=='#'||layout[s.x1][s.y1]=='*'){ //是否撞墙或者咬自己 return false;//死了 } if(layout[s.x1][s.y1]!='$'){ //没吃到食物 //尾巴减1 if(s.x2-1>1&&layout[s.x2-1][s.y2]=='*'){//找尾巴下个点 layout[s.x2][s.y2] = ' '; s.x2-=1; }else if(s.x2+1<N-1&&layout[s.x2+1][s.y2]=='*'){ layout[s.x2][s.y2] = ' '; s.x2+=1; }else if(s.y2-1>1&&layout[s.x2][s.y2-1]=='*'){ layout[s.x2][s.y2] = ' '; s.y2-=1; }else{ layout[s.x2][s.y2] = ' '; s.y2+=1; } } layout[s.x1][s.y1] = '*'; //棋盘标记为蛇 return true; } if(s.flag==2){ s.x1 -= 1;//移动 if(layout[s.x1][s.y1]=='#'||layout[s.x1][s.y1]=='*'){ //是否撞墙或者咬自己 return false;//死了 } if(layout[s.x1][s.y1]!='$'){ //没吃到食物 //尾巴减1 if(s.x2-1>1&&layout[s.x2-1][s.y2]=='*'){//找尾巴下个点 layout[s.x2][s.y2] = ' '; s.x2-=1; }else if(s.x2+1<N-1&&layout[s.x2+1][s.y2]=='*'){ layout[s.x2][s.y2] = ' '; s.x2+=1; }else if(s.y2-1>1&&layout[s.x2][s.y2-1]=='*'){ layout[s.x2][s.y2] = ' '; s.y2-=1; }else{ layout[s.x2][s.y2] = ' '; s.y2+=1; } } layout[s.x1][s.y1] = '*'; //棋盘标记为蛇 return true; } if(s.flag==3){ s.y1 += 1;//移动 if(layout[s.x1][s.y1]=='#'||layout[s.x1][s.y1]=='*'){ //是否撞墙或者咬自己 return false;//死了 } if(layout[s.x1][s.y1]!='$'){ //没吃到食物 //尾巴减1 if(s.x2-1>1&&layout[s.x2-1][s.y2]=='*'){//找尾巴下个点 layout[s.x2][s.y2] = ' '; s.x2-=1; }else if(s.x2+1<N-1&&layout[s.x2+1][s.y2]=='*'){ layout[s.x2][s.y2] = ' '; s.x2+=1; }else if(s.y2-1>1&&layout[s.x2][s.y2-1]=='*'){ layout[s.x2][s.y2] = ' '; s.y2-=1; }else{ layout[s.x2][s.y2] = ' '; s.y2+=1; } } layout[s.x1][s.y1] = '*'; //棋盘标记为蛇 return true; } if(s.flag==4){ s.x1 += 1;//移动 if(layout[s.x1][s.y1]=='#'||layout[s.x1][s.y1]=='*'){ //是否撞墙或者咬自己 return false;//死了 } if(layout[s.x1][s.y1]!='$'){ //没吃到食物 //尾巴减1 if(s.x2-1>1&&layout[s.x2-1][s.y2]=='*'){//找尾巴下个点 layout[s.x2][s.y2] = ' '; s.x2-=1; }else if(s.x2+1<N-1&&layout[s.x2+1][s.y2]=='*'){ layout[s.x2][s.y2] = ' '; s.x2+=1; }else if(s.y2-1>1&&layout[s.x2][s.y2-1]=='*'){ layout[s.x2][s.y2] = ' '; s.y2-=1; }else{ layout[s.x2][s.y2] = ' '; s.y2+=1; } } layout[s.x1][s.y1] = '*'; //棋盘标记为蛇 return true; } } int main(){ bool f = true; int time = 500; int t = 0; char c; Snack s; //初始化 s = init(); //显示菜单 menu(); while(f){ if (_kbhit()){//如果有按键按下,则_kbhit()函数返回真 c = _getch();//使用_getch()函数获取按下的键值 if(c == 'q'){ break; } if(c == -32) continue; if(c == 75) s.flag = 1; if(c == 72) s.flag = 2; if(c == 77) s.flag = 3; if(c == 80) s.flag = 4; } Sleep(time); f = move_kill(s); menu(); } return 0; } //75 72 77 80
相关文章