闲着蛋疼~ 写了个贪吃蛇
贴出源码,大家跑跑代码,多批评,多给建议!程序代码:
#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; }
[ 本帖最后由 韶志 于 2014-7-21 08:25 编辑 ]