版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
温馨提示程序语言:C、C++、C*、Python〔红色字体表示本课设使用的程序设计语言〕图形功能选项:Win32控制台程序〔黑框、文本界面〕、Win32程序、MFC、WinForm、Direct*10〔黑体标明表示本课设的程序图形类别,默认为非图形界面Win32控制台程序〕数据构造:根底类型、数组、链表、双向链表、搜索树〔非平衡二叉树〕、平衡二叉树、链表与平衡二叉树相结合、堆栈、队列、串、图〔黑体标明表示本课设使用的数据构造〕C++语言项:STL库〔黑体标明表示使用C++的STL库〕编译环境:Windows764位旗舰版〔Linu*及其他环境请慎重下载〕集成开发环境:VisualC++6.0、DEVC++、CodeBlocks、VisualStudio2015均可通过编译。〔浅蓝色字体表示需要运行修改后的版本,请用户自行选择源代码测试〕分多头文件编译:否〔所有代码根本都包含在一个文件,如需试验头文件功能,请自行参考相关文献〕容说明:1、课设题目及预览容将在第二页开场展示。2、代码行数:259行3、目录所示容,本文根本涵盖,如无容,会在本页进展说明。4、附录绝对包含用户使用手册及程序完整源代码和详细注释。5、如需下载其他头文件〔例如Direct*需另行配置〕,本文会在此进展说明。6、本文撰写容仅供学习参考,另外,由于本人水平有限,编写之处难免存在错误和纰漏,恳请各位教师或同学批评指正。上机报告程序实践名称:________________________________学生:________________________________专业:________________________________班级:________________________________**:________________________________指导教师:________________________________上机成绩:________________________________上机地点:________________________________上机时间:____________年_______月_______日一、上机目的与上机要求〔可以有多个目标及要求,对应多个上机容〕1、上机目的〔具体的目的,类似于“提出问题〞〕将理论用于实践,更充分的掌握课本的知识,稳固并加深对课本知识的理解,进一步提高我们的动手编程能力。编写程序既能锻炼我们的动手能力,又能培养提高我们的学习热情。贪吃蛇是一个很简单而且比拟益智的小游戏,编写起来比拟简单,而且我们所学的知识也恰好能解决这个问题。首先,我们需要明确一下编写贪吃蛇的框架。其次,需要几个类控制整个游戏的运作。最后,如何解决蛇移动和吃到食物的问题。2、上机要求〔具体的上机要求及相关的问题分析,类似于“分析问题〞〕由于游戏比拟简单,所以一个类足够驾驭这个游戏的运作。还有蛇的移动,因为蛇吃到一个食物,相应的长度就加一,这样,应该拆成蛇头、蛇身、蛇尾来进展比拟方便操作,蛇头控制移动方向,而且蛇头吃到了食物,则蛇尾不需要去除。二、上机设备〔环境〕及要求操作系统:Windows7 编译环境:VC6.0++三、上机容与步骤〔类似于“解决问题〞〕1、步骤1〔1〕上机容〔明确的上机容〕:解决问题的思路和方法〔系统/方法/算法等〕,图文结合首先,定义一个二维数组来储存整个地图的容;其次,再定义一个二维数组来记录蛇每局部的运动方向;最后,分析一下整个游戏的关键:一开场,我们把蛇分成了三个局部,蛇头、蛇身、蛇尾。如下图,黄色的是墙,这是初始状态的地图。食物蛇尾蛇头下列图是初始状态的方向。食物蛇尾→蛇头→蛇开场默认移动,先擦除蛇头,绘制蛇身,如下列图:食物蛇尾蛇身根据方向绘制蛇头,如下列图:食物蛇尾蛇身蛇头擦除蛇尾,如下列图:食物蛇身蛇头再绘制蛇尾,如下列图:食物蛇尾蛇头这样便完成了蛇的移动,同样的方向的记录也是类似的。食物蛇头蛇头↑蛇尾蛇尾↑注:有箭头代表蛇的方向。当蛇吃到食物的时候,只需要在食物的地方绘制蛇头,而原来蛇头的地方绘制蛇身即可,无须擦除蛇尾再进展绘制,然后重新产生食物,如下列图。蛇头蛇头↑蛇身蛇身↑蛇尾蛇尾↑食物当检测到按键的时候,先改变蛇的移动方向,再移动蛇即可。〔2〕主要实现〔详细的关键代码〕voidRetroSnaker::move(){switch(directionMap[hearY][hear*]) {caseUP:if(FOOD==map[hearY-1][hear*]) //吃到食物 againFood();elseif(EMPTY==map[hearY-1][hear*]) //什么都没遇到 erasingTheTail(); //擦除尾巴else{ gameOver=true; //没有遇到食物或者空,则表示游戏完毕break; } erasingTheHear(UP);break;caseDOWN:if(FOOD==map[hearY+1][hear*]) //吃到食物 againFood();elseif(EMPTY==map[hearY+1][hear*]) //什么都没遇到 erasingTheTail(); //擦除尾巴else{ gameOver=true; //没有遇到食物或者空,则表示游戏完毕break; } erasingTheHear(DOWN);break;caseLEFT:if(FOOD==map[hearY][hear*-1]) //吃到食物 againFood();elseif(EMPTY==map[hearY][hear*-1]) //什么都没遇到 erasingTheTail(); //擦除尾巴else{ gameOver=true; //没有遇到食物或者空,则表示游戏完毕break; } erasingTheHear(LEFT);break;caseRIGHT:if(FOOD==map[hearY][hear*+1]) //吃到食物 againFood();elseif(EMPTY==map[hearY][hear*+1]) //什么都没遇到 erasingTheTail(); //擦除尾巴else{ gameOver=true; //没有遇到食物或者空,则表示游戏完毕break; } erasingTheHear(RIGHT);break;default:break; }}四:上机运行结果与分析〔详细的程序运行结果,图/表/文相结合,并对结果进展较全面的比照分析,类似于“验证问题〞〕与预期的结论一致,运行结果满足预期效果。五:结论〔讨论〕1、上机结论〔对应前面的上机目的〕通过本次上机,充分的锻炼了我解决问题的能力,让我更加的了解到知识得运用才能熟练的掌握,也提高了我的学习兴趣和热情。2、讨论〔存在的问题及可能的改良方向〕游戏界面比拟单一,只有蛇和食物,没有统计分数和排行榜,也没有游戏完毕的画面,还不能调整游戏的难度,蛇的速度根本是恒定的,无法动态修改。这是我需要改良的地方。六、教师评审教师评语实验成绩〔虽然上机主要侧重于验证问题,但是建议各位教师从解决“工程技术问题〞,特别是“复杂工程问题〞的角度去评审学生上机过程及上机报告,主要容包括提出问题、分析问题、解决问题及验证问题。要有较详细的评审意见。〕签名:日期:附录用户使用手册1、编译运行即开场游戏。2、按小写字母wsad即可进展游戏的操作。3、按任意键暂停游戏程序源代码*include<iostream>*include<ctime>*include<conio.h>*include<stdlib.h>*include<Windows.h>usingnamespacestd;*defineN20 //地图大小*defineWALL5 //墙*defineHEAR1 //蛇头*defineTAIL2 //蛇尾*defineBODY3 //蛇身*defineFOOD4 //食物*defineEMPTY0 //空*defineUP'w'//蛇的前进方向:上下左右*defineDOWN's'*defineLEFT'a'*defineRIGHT'd'*defineGMAE_TIME100 //设置游戏的绘制速度classRetroSnaker{public: RetroSnaker(){Init();}boolgameOver; //游戏是否完毕voidmove();voidmove(charch);private:intmap[N][N]; //二维地图intdirectionMap[N][N]; //方向图inthear*,hearY; //蛇头坐标inttail*,tailY; //蛇尾坐标intfood*,foodY; //食物坐标booleatFood; //标记是否吃到食物voidInit(); //初始化voidgoto*Y(int*,inty); //光标跳转到屏幕的相应位置voidagainFood(); //食物被吃,再次产生食物voiderasingTheTail(); //擦除尾巴voiderasingTheHear(charch); //擦除蛇头};voidRetroSnaker::move(){switch(directionMap[hearY][hear*]) {caseUP:if(FOOD==map[hearY-1][hear*]) //吃到食物 againFood();elseif(EMPTY==map[hearY-1][hear*]) //什么都没遇到 erasingTheTail(); //擦除尾巴else{ gameOver=true; //没有遇到食物或者空,则表示游戏完毕break; } erasingTheHear(UP);break;caseDOWN:if(FOOD==map[hearY+1][hear*]) //吃到食物 againFood();elseif(EMPTY==map[hearY+1][hear*]) //什么都没遇到 erasingTheTail(); //擦除尾巴else{ gameOver=true; //没有遇到食物或者空,则表示游戏完毕break; } erasingTheHear(DOWN);break;caseLEFT:if(FOOD==map[hearY][hear*-1]) //吃到食物 againFood();elseif(EMPTY==map[hearY][hear*-1]) //什么都没遇到 erasingTheTail(); //擦除尾巴else{ gameOver=true; //没有遇到食物或者空,则表示游戏完毕break; } erasingTheHear(LEFT);break;caseRIGHT:if(FOOD==map[hearY][hear*+1]) //吃到食物 againFood();elseif(EMPTY==map[hearY][hear*+1]) //什么都没遇到 erasingTheTail(); //擦除尾巴else{ gameOver=true; //没有遇到食物或者空,则表示游戏完毕break; } erasingTheHear(RIGHT);break;default:break; }}voidRetroSnaker::move(charch){ directionMap[hearY][hear*]=ch; move();}voidRetroSnaker::Init(){inti=0,j=0; gameOver=false; eatFood=false;for(i=0;i<N;i++)for(j=0;j<N;j++){ map[i][j]=EMPTY; //清空二维数组 directionMap[i][j]=EMPTY; //清空方向图 }for(i=0;i<N;i++){ //初始化墙 map[0][i]=WALL; map[N-1][i]=WALL; map[i][0]=WALL; map[i][N-1]=WALL; }//初始化蛇头 hear*=N/2; hearY=N/2; map[hearY][hear*]=HEAR; directionMap[hearY][hear*]=RIGHT; //记录蛇头的移动方向//初始化蛇尾 tail*=N/2-1; tailY=N/2; map[tailY][tail*]=TAIL; directionMap[tailY][tail*]=RIGHT; //记录蛇尾的移动方向//初始化食物 srand(unsigned(time(NULL))); //随机播种do{ food*=rand()%(N-1)+1; //产生随机数1~(N-1) foodY=rand()%(N-1)+1; }while(EMPTY!=map[foodY][food*]); map[foodY][food*]=FOOD;//首次显示游戏界面for(i=0;i<N;i++){for(j=0;j<N;j++)switch(map[i][j]) {caseWALL:cout<<"■";break;caseHEAR:cout<<"○";break;caseBODY:caseTAIL:cout<<"●";break;caseFOOD:cout<<"*";break;default: cout<<"";break; } cout<<endl; }}voidRetroSnaker::goto*Y(int*,inty){COORDcoord; coord.*=2**; coord.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);}voidRetroSnaker::againFood(){ srand(unsigned(time(NULL))); //随机播种do{ food*=rand()%(N-1)+1; //产生随机数1~(N-1) foodY=rand()%(N-1)+1; }while(EMPTY!=map[foodY][food*]); map[foodY][food*]=FOOD; goto*Y(food*,foodY); cout<<"*";}voidRetroSnaker::erasingTheTail(){ goto*Y(tail*,tailY); //擦除尾巴 cout<<""; map[tailY][tail*]=EMPTY;if(UP==directionMap[tailY][tail*]){ directionMap[tailY][tail*]=EMPTY; tailY--; }elseif(DOWN==directionMap[tailY][tail*]){ directionMap[tailY][tail*]=EMPTY; tailY++; }elseif(LEFT==directionMap[tailY][tail*]){ directionMap[tailY][tail*]=EMPTY; tail*--; }else{ directionMap[tailY][tail*]=EMPTY; tail*++; } map[tailY][tail*]=TAIL;}voidRetroSnaker::erasingTheHear(charch){int*=hear*,y=hearY;if(UP==ch)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高职(风力发电工程技术)风电场运维管理综合测试题及答案
- 2026年审计代理教学(审计代理应用)试题及答案
- 2025年大学书法教育(书法教学方法)试题及答案
- 2025年高职移动应用技术与服务(程序优化)试题及答案
- 2025年大学大一(机器人学基础)机器人运动学原理应用综合测试题及答案
- 2025年高职包装工艺(包装制作)试题及答案
- 2025年大学大三(铁道工程)铁路隧道工程技术实务试题及答案
- 2025年大学信息资源管理(信息管理技巧)试题及答案
- 2025年大学护理学(护理伦理学基础)试题及答案
- 2025年大学艺术批评(批评研究)试题及答案
- 透析病人远期并发症及管理
- 2025陕西西安财金投资管理限公司招聘27人易考易错模拟试题(共500题)试卷后附参考答案
- 放射科X线胸片诊断技术要点
- 配网工程安全管理培训课件
- 2025年江西电力职业技术学院单招考试文化素质物理通关题库附答案详解【综合题】
- PS通道抠图课件
- 危险化学品岗位安全生产操作规程编写导则
- 2026年高考政治一轮复习:必修2《经济与社会》知识点背诵提纲
- 2026年高考总复习优化设计一轮复习语文-第2节 赏析科普文的语言和主要表现手法
- 豆腐研学课件
- (2025秋新版)青岛版科学三年级上册全册教案
评论
0/150
提交评论