C++贪吃蛇效果实现代码
程序员文章站
2022-07-02 18:34:05
效果极好…
#include
#include//该函数主要可以提供一些函数与符号常量
#include//提供大量基于迭代器的非成员模版函数...
效果极好…
#include #include//该函数主要可以提供一些函数与符号常量 #include//提供大量基于迭代器的非成员模版函数 #include//其中定义了通过控制台进行数据输入和数据输出的函数 #include//日期和时间头文件 #include #define ML 100 using namespace std; class Snake //声明一个类Snake { public: int head,tail,body[200],length; }; Snake T; //定义一个对象T int map[100][100]; //定义一个整形的二维数组做标记用 char maze[100][100]; //根据map数组的不同数值显示不同符号,以此绘图 void init() //初始化函数 { T.head=3; T.tail=0; // T.length=0; memset(T.body,0,sizeof(T.body)); } int card[800]; char order; //接收指令 int getnum() { static int n=0; n++; n=n%800; return card[n]; } void up() { int sum,i; sum=T.body[(T.head-1+ML)%ML]-100; if(map[sum/100][sum%100]==1) { T.length++; T.body[T.head++]=sum; T.head%=ML; map[sum/100][sum%100]=0; for(i=T.tail;i!=T.head;) { sum=T.body[i]; map[sum/100][sum%100]=-1; i++; i%=ML; } while(1) { sum=getnum(); if(map[sum/100][sum%100]==0) { map[sum/100][sum%100]=1; break; } } for(i=T.tail;i!=T.head;) { sum=T.body[i]; map[sum/100][sum%100]=0; i++; i%=ML; } } else { T.body[T.head++]=sum; T.head%=ML; T.tail=(++T.tail)%ML; } } void down() { int sum,i; sum=T.body[(T.head-1+ML)%ML]+100; if(map[sum/100][sum%100]==1) { T.length++; T.body[T.head++]=sum; T.head%=ML; map[sum/100][sum%100]=0; for(i=T.tail;i!=T.head;) { sum=T.body[i]; map[sum/100][sum%100]=-1; i++; i%=ML; } while(1) { sum=getnum(); if(map[sum/100][sum%100]==0) { map[sum/100][sum%100]=1; break; } } for(i=T.tail;i!=T.head;) { sum=T.body[i]; map[sum/100][sum%100]=0; i++; i%=ML; } } else { T.body[T.head++]=sum; T.head%=ML; T.tail=(++T.tail)%ML; } } void right() { int sum,i; sum=T.body[(T.head-1+ML)%ML]+1; if(map[sum/100][sum%100]==1) { T.length++; T.body[T.head++]=sum; T.head%=ML; map[sum/100][sum%100]=0; for(i=T.tail;i!=T.head;) { sum=T.body[i]; map[sum/100][sum%100]=-1; i++; i%=ML; } while(1) { sum=getnum(); if(map[sum/100][sum%100]==0) { map[sum/100][sum%100]=1; break; } } for(i=T.tail;i!=T.head;) { sum=T.body[i]; map[sum/100][sum%100]=0; i++; i%=ML; } } else { T.body[T.head++]=sum; T.head%=ML; T.tail=(++T.tail)%ML; } } void left() { int sum,i; sum=T.body[(T.head-1+ML)%ML]-1; if(map[sum/100][sum%100]==1) { T.length++; T.body[T.head++]=sum; T.head%=ML; map[sum/100][sum%100]=0; for(i=T.tail;i!=T.head;) { sum=T.body[i]; map[sum/100][sum%100]=-1; i++; i%=ML; } while(1) { sum=getnum(); if(map[sum/100][sum%100]==0) { map[sum/100][sum%100]=1; break; } } for(i=T.tail;i!=T.head;) { sum=T.body[i]; map[sum/100][sum%100]=0; i++; i%=ML; } } else { T.body[T.head++]=sum; T.head%=ML; T.tail=(++T.tail)%ML; } } int main() { memset(map,0,sizeof(map)); memset(maze,' ',sizeof(maze)); int i,j,sum=0,k=0,temp; for(i=1;i<20;i++) for(j=1;j<40;j++) { card[k++]=i*100+j; } srand(time(0)); temp=rand()%10+1; while(temp--) random_shuffle(card,card+19*39); for(i=0;i<=40;i++) map[i][0]=map[20][i]=map[i][40]=map[0][i]=-1; init(); T.length=1; T.body[T.head++]=101; T.head%=ML; sum=getnum(); map[sum/100][sum%100]=1; char jud='d'; int TM=300,start; while(1) { (TM>100)?(TM=300-T.length*60):(TM=50); start=clock(); //利用临时无穷循环制作刷屏时间 while(clock()-start<=TM && !kbhit()) //kbhit() 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0 { ; } if(kbhit()&&(order=getch(),order=='w'||order=='s'||order=='a'||order=='d')) { sum=T.body[(T.head-1+ML)%ML]; system("CLS"); for(i=T.tail;i!=T.head;) { temp=T.body[i]; map[temp/100][temp%100]=-1; i++; i%=ML; } if(order=='w') { jud=order; //cout<<"-->w\n"; if(map[sum/100-1][sum%100]!=-1) { for(i=T.tail;i!=T.head;) { temp=T.body[i]; map[temp/100][temp%100]=0; i++; i%=ML; } up(); } else { system("CLS"); cout<<"============================================"<=20){ system("CLS"); cout<<"============================================"<