贪吃蛇

来源:互联网 发布:大数据 分析网络状态 编辑:程序博客网 时间:2024/04/30 14:04

想写一个贪吃蛇~先占个坑

-----------------------------------

来填坑了,啦啦啦。

#include<iostream>#include<windows.h>#include<time.h>#include<conio.h>using namespace std;void gotoxy(int x,int y){COORD a;  /*COORD表示一个字符在控制台屏幕上的坐标。*/a.X=x;a.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),a);/*SetConsoleCursorPosition定位光标位置的函数,坐标为GetStdHandle()返回标准的输出的句柄,也就是获得输出屏幕缓冲区的句柄,并赋值给对象a*//*GetStdHandle()返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄。*/}void color(int a)              //颜色函数{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);/*SetConsoleTextAttribute是API设置控制台窗口字体颜色和背景色的函数*/}struct point {int x;int y;};class asnake{private:int image[20][30];//小蛇活动范围point snake[2000];int foodx;int foody;int snakex;int snakey;int head;//头部下标 int tail;int direct;int gamespeed;int score;int numx;char arrowkey;int gameover;int level;public:asnake(){            head=3;                //初始化头部下标        tail=0;                //初始化尾部下标    gamespeed=150;         //游戏速度(移动的间隔时间)    score=0;               //初始化分数为0        direct='d';            //小蛇的初始方向向右gameover=0;            //进入游戏初始化为0level=1;}void init();                //初始化游戏面板及小蛇的坐标int  drawsnake();           //记录小蛇每次移动后头部及身体的下一坐标void  automove();            //使小蛇自动移动    int  over();            //判断游戏是否结束int  generatefood();        //产生食物void display();             //显示游戏面板void shiftleft();          //控制左移void shiftright();          //控制右移void shiftdown();           //控制下移void shiftup();            //控制上移int  playgame();            //执行游戏的函数void setspeed();            //设置速度int pause();                //游戏的暂停 };void asnake::init()//初始化 {for(int i=0;i<20;i++){for(int j=0;j<30;j++){image[i][j]=0;}}for(int j=0;j<4;j++){snake[j].x=1;snake[j].y=j+1;}for(int i=1;i<=4;i++){image[1][i]=3;}}int asnake::over(){if(snakex<0||snakex>19||snakey<0||snakey>29){system("cls");gotoxy(35,5);cout << "-----Game over23333!-----" << endl<<endl;gameover=1;return gameover;}if((image[snakex][snakey]!=0)&&!(snakex==foodx&&snakey==foody)){system("cls");gotoxy(35,5);cout << "-----Game over23333!-----" << endl<<endl;gameover=1;return gameover;}return 0;}int asnake::generatefood()                                        // 产生食物{  srand(time(0));                                              do{      foodx=rand()%20;                                                  foody=rand()%30;                                            }while(image[foodx][foody]!=0);                                   image[foodx][foody]=2; return image[foodx][foody]; /*通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值, 进而产生不同的随机数序列 */}void asnake::display()//画出所有的图像。 {color(10);gotoxy(0,0);for(int i=0;i<32;i++){cout<<"■";} gotoxy(0,1);for(int i=0;i<20;i++){cout<<"■";for(int j=0;j<30;j++){switch(image[i][j]){case 0:cout<<"  ";break;case 2:color(12);cout<<"◆";break;case 3:color(11);cout<<"●";break;}}color(10);cout<<"■"<<endl;}color(10);for(int i=0;i<32;i++)cout<<"■";cout<<endl;color(14);gotoxy(70,10);cout<<"SCORE: "<<score<<endl<<endl;gotoxy(70,12);cout<<"level: "<<level<<endl; }int asnake::drawsnake(){if(snakex==foodx&&snakey==foody){score+=10;image[foodx][foody]=3;head++;snake[head].x=snakex;snake[head].y=snakey;display();generatefood();if(score>40&&score<90) {gamespeed=gamespeed/2;level=2;}else if(score>90&&score<140) {gamespeed=gamespeed/10;level=3;}else if(score>140&&score<200) {gamespeed=gamespeed/10;level=3;}else if(score>280) {gamespeed=gamespeed/10;level=4;}else if(score==360){system("cls");color(15);gotoxy(30,10);cout<<"-----你这只猪哈哈哈哈哈哈------"<<endl; exit(0);}}else{image[snake[tail].x][snake[tail].y]=0;                                    tail++;                                    head++;        snake[head].x=snakex;                   snake[head].y=snakey;        image[snake[head].x][snake[head].y]=3;         display(); }return 0;}  void asnake::shiftleft(){direct='a';}         void asnake::shiftright(){direct='d';}         void asnake::shiftdown(){direct='s';}           void asnake::shiftup(){direct='w';}void  asnake::automove(){switch(direct){case 'd':snakex= snake[head].x; snakey= snake[head].y+1;break; case 'a':snakex= snake[head].x; snakey= snake[head].y-1;break; case 'w':snakex= snake[head].x-1; snakey= snake[head].y;break; case 's':snakex= snake[head].x+1; snakey= snake[head].y;break;      default:;}}void asnake::setspeed(){int speed,mark=0;for(int i=0;i<10;i++){cout<<endl;}cout<<"                            make your choice first please"<<endl<<endl;cout<<"                1.slow   2.normal   3.fast   4.very fast   5.very very fast,hahaha"<<endl<<endl;while(mark==0){cout<<"                                ";cin>>speed;switch(speed){case 1:gamespeed=150;mark=1;break;case 2:gamespeed=125;mark=1;break;case 3:gamespeed=100;mark=1;break;case 4:gamespeed=50;mark=1;break;case 5:gamespeed=10;mark=1;break;default:cout<<"别乱按。。!"<<endl;break;}}}  int asnake::playgame(){  init();                //初始化游戏面板及小蛇的坐标 generatefood(); display();            //显示游戏面板  while(gameover==0) {  if(kbhit()!=0)    //kbhit() 功能及返回值: 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0       {//接受按键          arrowkey = getch();        } if(direct=='w'||direct=='s') { switch(arrowkey) { case 'd':shiftright();break; case 'a':shiftleft();break; default:break; } } else  { switch(arrowkey) { case 's':shiftdown();break; case 'w':shiftup();break; default:break; } } Sleep(gamespeed); automove();   over(); if(gameover==1) break; drawsnake(); display(); }return 0;}int main(){for(int i=0;i<10;i++){cout<<endl;}color(15);cout<<"                 --------------          贪~吃~蛇~         --------------         "<<endl;cout<<"                -----------游戏规则:w向上,a向左,d向右,s向下。-----------"<<endl;for(int i=0;i<10;i++){cout<<endl;}system("pause");system("cls");asnake SNAKE;SNAKE.setspeed();system("cls"); SNAKE.playgame();return 0;}  


0 0