贪吃蛇
来源:互联网 发布:大数据 分析网络状态 编辑:程序博客网 时间: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
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 贪吃蛇
- 利用Shapefile进行简单的离线地址解析
- 分布式事务-二阶段提交
- The command could not be located because '/sbin' is not included in the PATH environment variable
- hdu 5224
- spring框架的IoC设计思想
- 贪吃蛇
- SPFA
- 阅读《Android 从入门到精通》(21)——滚动视图
- xlsTemplate 1.0----excel模版工具1.0
- Webdriver中比较惯用的操作元素的方法
- Nagios监控部署
- Maven项目中pom文件分析
- nodejs+ejs+express+echart+
- stl里的function和bind的实现