Dos界面C++贪吃蛇设计报告.doc_第1页
Dos界面C++贪吃蛇设计报告.doc_第2页
Dos界面C++贪吃蛇设计报告.doc_第3页
Dos界面C++贪吃蛇设计报告.doc_第4页
Dos界面C++贪吃蛇设计报告.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

综合实验项目:贪吃蛇游戏1、问题需求(1)控制游戏:按方向键,能控制蛇的移动;(2)蛇在固定的范围内移动,不能碰触边界。不能撞到自身,否则,游戏结束。(3)固定范围内随机出现白子,蛇每吃一个白子长长一格,分数增加,每增加5分蛇的移动速度自动增加。2、程序流程图3、详细设计设计说明:本程序运行代码如下:#include #include #include #include #include using namespace std;int score=0,t=300,f=1;/得分与时间间隔/ms(控制贪吃蛇的速度)double ss=0,tt=0;/统计时间所用参数class NodeNode(): x(0), y(0), prior(0), next(0) int x;int y;Node *prior;Node *next;friend class Snake;class Snakepublic:Snake();Snake();void output();void move();void change_point(char);private:Node *head;Node *tail;enum p UP, RIGHT, DOWN, LEFT point; /方向int food_x, food_y; /食物的坐标static const int N = 23;int gameNN;void add_head(int, int); /添加坐标为a,b的结点void delete_tail(); /删除最后一个结点void greate_food(); /产生食物void gotoxy(int, int);void menu(); /游戏操作菜单int main() system(color a); /初始cmd窗口颜色为黑(背景)淡绿(文字)coutnnnnnn ;for(int i=0;i23;i+)char star=Welcome To Snake Game!;coutstari;Sleep(170);coutnn 祝你好运!endl;Sleep(3000);if(kbhit()char kk=getch();if(kk=9)f=5; /如果执行,吃一颗星加5分system(cls);Snake s;menu();system(color 1a);s.output(); while (true) char keydown = getch();if(keydown=32)getch();if(keydown=27)return 0;s.change_point(keydown);while (!kbhit()clock_t start,end;start=clock();s.move();s.output();Sleep(t);end=clock();tt=(double)(end-start)/CLOCKS_PER_SEC;ss+=tt;cout 时间:(int)ss;return 0;void menu() system(color 1a);cout nnn 操作方法:上 下 左 右;cout nnn 暂停 Space 退出 Esc;cout nnnn 好 天;cout nn 好 天;cout nn 学 向;cout nn 习 上;void gameover() /游戏结束后的信息以及操作 system(cls);system(color 5e);cout nnnn -_-。sorry! 你已经挂了!;cout nn 你的最后战绩score:score 时间:(int)ss; cout nn 秽土转生请按:1 退出请按 2;cout nn make your chioce:;char keydown=getch();while(keydown!=1&keydown!=2)system(cls);cout nnnnn 你的输入有误,请重新选择:秽土转生请按:1 退出请按 2:;cout nn make your chioce:;keydown=getch();if(keydown=1)score=0;t=300;f=1;ss=0;tt=0;system(cls);main();else if(keydown=2)exit(0);Snake:Snake(): head(0), tail(0), point(RIGHT), food_x(0), food_y(0)int i;for (i = 0; i next;delete temp;void Snake:add_head(int a, int b)Node *temp = new Node;temp-x = a;temp-y = b;if (NULL = head) /如果头结点为空,那么就将这个点设为头结点head = tail = temp;else /否则添加到头结点的前面,作为新的头结点head-prior = temp;temp-next = head; head = head-prior; /这里head前移,使head一直指向头结点gameab = 1;void Snake:delete_tail()Node *temp = tail;gametail-xtail-y = 0; /将该结点的坐标对应的值置为tail = tail-prior; /tail尾结点前移,删除保存了原来尾结点的temp;tail-next = NULL;delete temp;void Snake:output() int i, j;gotoxy(0, 0);cout 目前战绩score:scoreendl; /分数统计for (i = 0; i N; +i)for (j = 0; j N; +j)if (1 = gameij) /数组元素的值为则输出*cout * ;else /否则输出空格,注意这里有两个空格,上面的*号后面也有一个空格cout ;cout x;int b = head-y;switch (point)case UP: -a; break;case DOWN: +a; break;case RIGHT: +b; break;case LEFT: -b; break;if (1 = gameab & a != food_x & b != food_y) /碰到点了但不是食物那么死亡 this-Snake(); gameover();if (a = food_x & b = food_y) /吃到食物了add_head(a, b);score+=f;if(score%5=0&t0)t-=100;system(cls);if(score=15)coutnnnnnnn 太棒了,已经是最高时速了endl;else coutnnnnnnn 很不错,要加速了,请小心!endl;Sleep(3000);system(cls);menu();ss-=3;greate_food();return;add_head(a, b);delete_tail();void Snake:greate_food()srand(unsigned(time(0);dofood_x = rand() % 21 + 1; /产生-21的随机数food_y = rand() % 21 + 1; while (1 = gamefood_xfood_y); /对应的坐标已经有点存在就重新产生食物gamefood_xfood_y = 1; /食物坐标对应的值赋为void Snake:gotoxy(int x, int y) /定位光标HANDLE hOutput;COORD loc;loc.X = x;loc.Y = y;hOutput = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOutput, loc);4、程序运行结果截图: 游戏欢迎界面: (1) 游戏运行界面: (2)当前分数以及时间: (3) (4)加速提示: (5) 速度最大时(得分=15分): (6)游戏结束(输入错误时显示右图): (7) (8)、程序使用说明:(1)程序开始执行时显示欢迎菜单,稍后进入游戏界面;游戏界面右方显示游戏操作方法以及相关功能;(2)在图(1)时,若按下Tab键,则蛇吃一颗星加5分,不按或键入其它键,无此功能;(3)通过()键控制蛇的运动方向,space键暂停,esc退出游戏;(4)蛇吃一颗星加1分,右上方分数实时刷新,分数达到5分时显示加速提示,蛇运动速度加快,同理10分时再次加快,15分时达到最快速度;(5)蛇头撞墙或撞到自身,显示图(7)游戏结束信息(玩家的最终得分以及花费时间);亦可按1重新来过,按2则退出,如若输入其它键位则显示图(8)。6、本实验的心得体会程序设计实验心得刚刚开始学习的是时候,对于书本上的知识,各个类别极其代表意义,过眼即忘;在过去的一个学期里,掌握了C+中最为基础的知识体系,但除了课后作业以外却少有编写程序的经验;俗话说的好,实践是学习知识的最终目的。在这个学期,经过十二个星期的努力,终于完成了程序设计实验,在这个的过程中,知道到了自己的许多不足之处。在刚刚开始做这个项目的时候,参考书中以及网上的代码。在这些代码的基础上添加一些自己想要的功能,开始时,由于对整体代码理解欠佳,一直失败,后来经过多次阅读、尝试,总结之前的错误,功夫不负有心人,最终额外功能逐步实现;再后来经过进一步的调试,优化,使得程序达到了老师的要求,通过交流也实现了一些特殊功能,使游戏更加丰富多彩.在编码过程中学会了面向对象程序设计的基本思路和方法,知道了如何根据实际需求进行分析,从而设计

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论