C++课程设计贪吃蛇小游戏(内附完整源码及附件)_第1页
C++课程设计贪吃蛇小游戏(内附完整源码及附件)_第2页
C++课程设计贪吃蛇小游戏(内附完整源码及附件)_第3页
C++课程设计贪吃蛇小游戏(内附完整源码及附件)_第4页
C++课程设计贪吃蛇小游戏(内附完整源码及附件)_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

温馨提示程序语言:C、C+、C#、Python(红色字体 表示本课设使用的程序设计语言)图形功能选项:Win32控制台程序(黑框、文本界面)、Win32程序、MFC、WinForm、DirectX10(黑体标明 表示本课设的程序图形类别,默认为非图形界面Win32控制台程序)数据结构:基础类型、数组、链表、双向链表、搜索树(非平衡二叉树)、平衡二叉树、链表与平衡二叉树相结合、堆栈、队列、串、图(黑体标明 表示本课设使用的数据结构)C+语言项:STL库(黑体标明 表示使用C+的STL库)编译环境:Windows 7 64位旗舰版(Linux及其他环境请谨慎下载)集成开发环境:Visual C+ 6.0、DEVC+、CodeBlocks、Visual Studio 2015均可通过编译。(浅蓝色字体 表示需要运行修改后的版本,请用户自行选择源代码测试)分多头文件编译:否(所有代码基本都包含在一个文件内,如需试验头文件功能,请自行参考相关文献)内容说明:1、课设题目及预览内容 将在第二页开始展示。2、代码行数:259行3、目录 所示内容,本文基本涵盖,如无内容,会在本页进行说明。4、附录 绝对包含用户使用手册及程序完整源代码和详细注释。5、如需下载 其他 头文件(例如DirectX需另行配置),本文会在此进行说明。6、本文撰写内容仅供学习参考,另外,由于本人水平有限,编写之处难免存在错误和纰漏,恳请各位老师或同学批评指正。上 机 报 告程序实践名称:_学生姓名:_专 业:_班 级:_学 号:_指导教师:_上机成绩:_上机地点:_上机时间:_年_月_日一、上机目的与上机要求(可以有多个目标及要求,对应多个上机内容)1、上机目的(具体的目的,类似于“提出问题”)将理论用于实践,更充分的掌握课本的知识,巩固并加深对课本知识的理解,进一步提高我们的动手编程能力。编写程序既能锻炼我们的动手能力,又能培养提高我们的学习热情。贪吃蛇是一个很简单而且比较益智的小游戏,编写起来比较简单,而且我们所学的知识也恰好能解决这个问题。首先,我们需要明确一下编写贪吃蛇的框架。其次,需要几个类控制整个游戏的运作。最后,如何解决蛇移动和吃到食物的问题。2、上机要求 (具体的上机要求及相关的问题分析,类似于“分析问题”)由于游戏比较简单,所以一个类足够驾驭这个游戏的运作。还有蛇的移动,因为蛇吃到一个食物,相应的长度就加一,这样,应该拆成蛇头、蛇身、蛇尾来进行比较方便操作,蛇头控制移动方向,而且蛇头吃到了食物,则蛇尾不需要去除。二、上机设备(环境)及要求操作系统:Windows 7编译环境:VC6.0+三、上机内容与步骤(类似于“解决问题”)1、步骤1(1)上机内容(明确的上机内容):解决问题的思路和方法(系统/方法/算法等),图文结合首先,定义一个二维数组来储存整个地图的内容;其次,再定义一个二维数组来记录蛇每部分的运动方向;最后,分析一下整个游戏的关键:一开始,我们把蛇分成了三个部分,蛇头、蛇身、蛇尾。如图所示,黄色的是墙,这是初始状态的地图。食物蛇尾蛇头下图是初始状态的方向。食物蛇尾蛇头蛇开始默认移动,先擦除蛇头,绘制蛇身,如下图:食物蛇尾蛇身根据方向绘制蛇头,如下图:食物蛇尾蛇身蛇头擦除蛇尾,如下图:食物蛇身蛇头再绘制蛇尾,如下图:食物蛇尾蛇头这样便完成了蛇的移动,同样的方向的记录也是类似的。食物蛇头蛇头蛇尾蛇尾注:有箭头代表蛇的方向。当蛇吃到食物的时候,只需要在食物的地方绘制蛇头,而原来蛇头的地方绘制蛇身即可,无须擦除蛇尾再进行绘制,然后重新产生食物,如下图。蛇头蛇头蛇身蛇身蛇尾蛇尾食物当检测到按键的时候,先改变蛇的移动方向,再移动蛇即可。(2)主要实现(详细的关键代码)void RetroSnaker:move()switch (directionMaphearYhearX)case UP:if (FOOD = maphearY - 1hearX)/吃到食物againFood();else if (EMPTY = maphearY - 1hearX)/什么都没遇到erasingTheTail();/擦除尾巴else gameOver = true;/没有遇到食物或者空,则表示游戏结束break;erasingTheHear(UP);break;case DOWN:if (FOOD = maphearY + 1hearX) /吃到食物againFood();else if (EMPTY = maphearY + 1hearX)/什么都没遇到erasingTheTail();/擦除尾巴else gameOver = true;/没有遇到食物或者空,则表示游戏结束break;erasingTheHear(DOWN);break;case LEFT:if (FOOD = maphearYhearX - 1)/吃到食物againFood();else if (EMPTY = maphearYhearX - 1)/什么都没遇到erasingTheTail();/擦除尾巴else gameOver = true;/没有遇到食物或者空,则表示游戏结束break;erasingTheHear(LEFT);break;case RIGHT:if (FOOD = maphearYhearX + 1) /吃到食物againFood();else if (EMPTY = maphearYhearX + 1)/什么都没遇到erasingTheTail();/擦除尾巴else gameOver = true;/没有遇到食物或者空,则表示游戏结束break;erasingTheHear(RIGHT);break;default:break;四:上机运行结果与分析(详细的程序运行结果,图/表/文相结合,并对结果进行较全面的对比分析,类似于“验证问题”)与预期的结论一致,运行结果满足预期效果。五:结论(讨论)1、上机结论 (对应前面的上机目的)通过本次上机,充分的锻炼了我解决问题的能力,让我更加的了解到知识得运用才能熟练的掌握,也提高了我的学习兴趣和热情。2、讨论 (存在的问题及可能的改进方向)游戏界面比较单一,只有蛇和食物,没有统计分数和排行榜,也没有游戏结束的画面,还不能调整游戏的难度,蛇的速度基本是恒定的,无法动态修改。这是我需要改进的地方。六、教师评审教师评语实验成绩(虽然上机主要侧重于验证问题,但是建议各位老师从解决“工程技术问题”,特别是“复杂工程问题”的角度去评审学生上机过程及上机报告,主要内容包括提出问题、分析问题、解决问题及验证问题。要有较详细的评审意见。) 签名: 日期:附 录用户使用手册1、编译运行即开始游戏。2、按小写字母wsad即可进行游戏的操作。3、按任意键暂停游戏程序源代码#include#include#include#include#includeusing namespace std;#define N 20/地图大小#define WALL 5/墙#define HEAR 1/蛇头#define TAIL 2/蛇尾#define BODY 3/蛇身#define FOOD 4/食物#define EMPTY 0/空#define UP w/蛇的前进方向:上下左右#define DOWN s#define LEFT a#define RIGHT d#define GMAE_TIME 100/设置游戏的绘制速度class RetroSnaker public:RetroSnaker() Init(); bool gameOver;/游戏是否结束void move();void move(char ch);private:int mapNN;/二维地图int directionMapNN;/方向图int hearX, hearY;/蛇头坐标int tailX, tailY;/蛇尾坐标int foodX, foodY;/食物坐标bool eatFood;/标记是否吃到食物void Init();/初始化void gotoXY(int x, int y);/光标跳转到屏幕的相应位置void againFood();/食物被吃,再次产生食物void erasingTheTail();/擦除尾巴void erasingTheHear(char ch);/擦除蛇头;void RetroSnaker:move()switch (directionMaphearYhearX)case UP:if (FOOD = maphearY - 1hearX)/吃到食物againFood();else if (EMPTY = maphearY - 1hearX)/什么都没遇到erasingTheTail();/擦除尾巴else gameOver = true;/没有遇到食物或者空,则表示游戏结束break;erasingTheHear(UP);break;case DOWN:if (FOOD = maphearY + 1hearX) /吃到食物againFood();else if (EMPTY = maphearY + 1hearX)/什么都没遇到erasingTheTail();/擦除尾巴else gameOver = true;/没有遇到食物或者空,则表示游戏结束break;erasingTheHear(DOWN);break;case LEFT:if (FOOD = maphearYhearX - 1)/吃到食物againFood();else if (EMPTY = maphearYhearX - 1)/什么都没遇到erasingTheTail();/擦除尾巴else gameOver = true;/没有遇到食物或者空,则表示游戏结束break;erasingTheHear(LEFT);break;case RIGHT:if (FOOD = maphearYhearX + 1) /吃到食物againFood();else if (EMPTY = maphearYhearX + 1)/什么都没遇到erasingTheTail();/擦除尾巴else gameOver = true;/没有遇到食物或者空,则表示游戏结束break;erasingTheHear(RIGHT);break;default:break;void RetroSnaker:move(char ch)directionMaphearYhearX = ch;move();void RetroSnaker:Init()int i = 0,j=0;gameOver = false;eatFood = false;for (i = 0; i N; i+)for (j = 0; j N; j+) mapij = EMPTY;/清空二维数组directionMapij = EMPTY;/清空方向图for (i = 0; i N; i+) /初始化墙map0i = WALL;mapN - 1i = WALL;mapi0 = WALL;mapiN - 1 = WALL;/初始化蛇头hearX = N / 2;hearY = N / 2;maphearYhearX = HEAR;directionMaphearYhearX = RIGHT;/记录蛇头的移动方向/初始化蛇尾tailX = N / 2 - 1;tailY = N / 2;maptailYtailX = TAIL;directionMaptailYtailX = RIGHT;/记录蛇尾的移动方向/初始化食物srand(unsigned(time(NULL);/随机播种do foodX = rand() % (N - 1) + 1;/产生随机数1(N-1)foodY = rand() % (N - 1) + 1; while (EMPTY != mapfoodYfoodX);mapfoodYfoodX = FOOD;/首次显示游戏界面for (i = 0; i N; i+) for (j = 0; j N; j+)switch (mapij)case WALL:cout ; break;case HEAR:cout ; break;case BODY:case TAIL:cout ; break;case FOOD:cout ; break;default:cout ;break;cout endl;void RetroSnaker:gotoXY(int x, int y)COORD coord;coord.X = 2*x;coord.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);void RetroSnaker:againFood()srand(unsigned(time(NULL);/随机播种do foodX = rand() % (N - 1) + 1;/产生随机数1(N-1)foodY = rand() % (N - 1) + 1; while (EMPTY != mapfoodYfoodX);mapfoodYfoodX = FOOD;gotoXY(foodX, foodY);cout ;void RetroSnaker:erasingTheTail()gotoXY(tailX, tailY);/擦除尾巴cout ;maptailYtailX = EMPTY;if (UP = directionMaptailYtailX) directionMaptailYtailX = EMPTY;tailY-;else if (DOWN = directionMaptailYtailX) directionMaptailYtailX = EMPTY;tailY+;else if (LEFT =

温馨提示

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

评论

0/150

提交评论