ImageVerifierCode 换一换
格式:DOCX , 页数:48 ,大小:399.71KB ,
资源ID:13909800      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/13909800.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(贪吃蛇项目报告Word下载.docx)为本站会员(b****0)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

贪吃蛇项目报告Word下载.docx

1、1熟悉函数的调用与程序的模块化设计,加深对所学知识的理解2加强自学能力,遇到不了解的函数或者方法,通过图书及网络资源学习,提高学习能力3完成贪吃蛇游戏,通过小项目来检验一学期的学习效果,增加学习兴趣1.2 功能描述该游戏在继承传统同类游戏规则的基础上,我们添加了我们自己的想法与功能,设计如下:游戏规则包括蛇的运动范围、蛇的生命周期问题、分数统计、关卡判断。其中蛇的运动范围是一个15*15的数组呢,蛇运动的地图抽象成为一个15*15的二维整形数组,每个数组值代表一个小方块的坐标值,这样,蛇只能在规定好的二维数组内运动当蛇遇到数组左右边界值(我们在这里抽象成为上、下、左、右四个边界,其中上边界坐标

2、值中纵坐标都是0,横坐标任意,下边界为纵坐标是15,同理横坐标不变,左边界为横坐标为0,纵坐标任意,同理右边界为横坐标为15,纵坐标任意)时,宣告蛇生命周期结束(上下边界不限定),贪吃蛇死亡,这个是第一个规则;另外,当蛇自己吃到自己身体的某一部分时,也宣告游戏结束,在程序里通过循环判断蛇头下一个前进方向的节点是不是蛇身上的某一部分节点即可,如果是那么蛇死亡,否则继续运行游戏。 分数统计算法的思想是每次蛇吃到一个果实时,相加的分数为一个定值10来记录分数,这样可以随着游戏难度的增加,分数值也随之增多。关卡功能设置通过与分数相关联而体现的,初始化游戏分数为0,关卡障碍物选择由玩家键入,当玩家玩到一

3、定的分数时(例如是100)关卡加一,变为第二关,同时,蛇前进速度相应增加一个等级,障碍物的设置也变化,这样就实现了不同关卡,不同速度的贪吃蛇,从而增加了游戏的难度。 蛇: 1、能够实现贪吃蛇自动前线移动,也就是贪吃蛇能够“活动”的外观效果,根据相同的时间间隔,每一次将贪吃蛇自身的蛇头向前移动一个小格子,同时蛇尾向前移动一个小格子,移动方向为贪吃蛇行走的方向。2、每当一个食物时,蛇长度增加一格3、蛇头碰到自身时则游戏结束4、通过键盘来控制蛇的移动食物:1、每当蛇吃到食物时,重置食物2、吃到特定食物时,蛇的长度能够缩短边界和障碍物:1、遇到边界和障碍物则游戏终止成绩统计:1、当贪吃蛇吃到果实时,玩

4、家的分数就应该随着吃到的果实而增加,增加的规则就是每一个吃到一个食物则乘以10得到分数。2、能够与历史成绩进行比较,显示高分排行榜输入与输出:1、通过键盘选择障碍物关卡数2、通过键盘选择蛇的速度3、显示游戏指南4、能够即时显示当次游戏的关卡数及游戏分数5、显示游戏界面贪吃蛇的总体功能图1.3小组成员分工小组成员功能分析小组讨论,确定项目题目和基本方案,组员提出想实现的功能,分析可行性讨论建议整理方案分工安排接口实现成绩,特效蛇的基本功能障碍物功能边界问题关卡递进最初源代码添加注释基本功能添加边界成绩存档食物重置特殊效果障碍物关卡功能汇总整理测试改进2总体设计报告考虑到要实现的功能太多,所以宜采

5、用模块化设计,把功能分块(在介绍功能时已经按这个方式介绍了),然后设计各个模块之间参数的传递,衔接起来,最后实现每个功能的算法。首先我们定义了所需要的数据类型1.Node(结点)型定义用来作为蛇的头,身,尾的数据类型以及障碍物的数据类型每个成员的设计已在注释中注明,其中蛇和障碍物均用链表结构表示struct Node int x; /*蛇某一节的横坐标*/ int y; /*蛇某一节的纵坐标*/ struct Node *pre; /*蛇某一节的前驱结点*/ struct Node *next; /*蛇某一节的后继结点*/;2Food(食物)型定义 用来储存食物的横纵坐标及显示的字母3.Pla

6、yer(玩家)型定义储存玩家的姓名和成绩2.1函数分块 总的来说,我们把所有功能分成了以下几个大块: main snake food barrier and block grade共五个大块,分别实现相应功能,见名知意,各块的功能显而易见,依次实现主要的运行(main),蛇的控制、移动、增减(snake),食物的重置(food),障碍物的设置及边界的判断(barrier and block),成绩的统计与存档(grade)每个模块均存在一个CPP中,截图如下:2.2接口设计下面分别介绍每个大块的内部函数接口设计main:主函数:int main()其中main函数里定义了游戏必须的一些变量输入

7、函数:int input(char*pname,int*barrierkind)第一个形参为char*类型,用来接收main函数里面的玩家名字,便于输入赋值,因为要进行写操作修改其值,所以定义成一级指针;第二个形参为障碍物类型,即初始化的障碍物分布,同样要在input里赋值,所以用int*型。返回值为速度值,是一个整数,游戏通过这个数来控制蛇前进的速度,所以定义为int屏幕显示函数:void screenshow(int score,int stage,Node*head,Node*firstbar,Food*food)要显示当前的分数和关卡,所以传两个整型参数score和stage;又要通过

8、二位数组扫描,根据横纵坐标来看输出“”(空格)还是蛇“ ”,或障碍物“”,或食物,所以要传结构体参数Node*和FoodSnake:蛇的初始化函数:void initalsnake(int*grade,Node*head,Node*rear)顺便把成绩也初始化,所以传了个int型参数grade;然后由于要修改main函数中Node*head目标空间的的横纵坐标,所以这里用了一个二级指针,否则,若设计成Node*型,则形参改的值只在该函数有效,对main函数里的head无影响(此处曾调试很久,在5.2.2心得体会里在详细说明)方向输入函数:char directioninput(char c)由

9、键盘键入一个值,传回有效值,故返回值类型为char, 由主函数传过来而不内部定义时避免输入无效值时出错,所以此处相当于输入无效值则还是原值(内部最后一句为return c)。蛇移动函数:void snakeheadmove(char c,Node*head)传前进的方向,为字母值,用char,头要移动,需要改值,所以用二级指针添加和删除结点函数:void addpoint(Node*head,Node*rear)void deletepoint(Node*head,Node*rear)由于用的是双向链表,所以要传头尾两个参数,需改值,故用二级指针Food:食物重置函数:void foodres

10、et(char c,Food*food,Node*head,Node*firstbar)当玩到最后蛇身较长时,重置多次可能还不行,所以会内定为在蛇前进方向的前两个出食物,所以要传前进方向,用char;需改变食物的横纵坐标及显示字母,故第二个参数用一级指针;要判断食物是否重置到蛇身或障碍物上,所以传二者参数,由于只是判断不需要改值,所以一级指针即可barrier and block:障碍物初始化函数:void initalbarrier(int barrierkind,Node*firstbar,Node*lastbar)要调用障碍物重置函数void barrierset(int barrier

11、kind,Node*firstbar,Node*lastbar),需要主函数里的实参,所以第一个参数用int,便于内部传值调用其他函数;要修改主函数中firstbar和lastbar的目标空间的值,所以用二级指针;判断出界函数int Block(Node *head)看头部的坐标是否出界,所以只需Node*即可;对判断结果进行记录,返回0或1,所以用int;障碍物重置函数void barrierset(int barrierkind,Node*firstbar,Node*lastbar)接收关卡数,故第一个参数定义为int; 要修改主函数中firstbar和lastbar的目标空间的值,所以用

12、二级指针;判断游戏结束函数:int Gameover(Node*head,Node*firstbar)需要判断头是否触到障碍物,所以传参数Node*;Grade:成绩插入函数:void scorecompare(Player*top,Player*player)把该次的成绩与原来的前十名成绩进行比较,需要记录名字,所以传结构体Player*;历史成绩复制函数:void fileinital(Player*topplayer)由于要把文件中的历史成绩赋值给主函数的结构体数组,所以传一级指针Player*成绩存档函数:void file(Player*top)把排序后的新的TOP10的成绩写入文档

13、,由于是一维数组,所以只能传指针;参数传递图: main grade snakebolck 注明:单项箭头的指向为参数传递的方向; 双向箭头说明有传递返回值; 主要采取指针参数改动值,所以很少有返回值;3详细设计报告3.1程序结构程序流程图3.1.1各种宏定义以及说明#define boundary 15 /* 边界定义为15*15 */#define N 10 /* 只存取和展示前10名玩家 */3.1.2主要函数声明如下int input(char*,int*);显示最初的提示界面,实现难度和关卡的选择输入;void foodreset(char c,Food*food,Node*head

14、,Node*firstbar);实现食物的随机重置;void initalsnake(int*,Node*,Node*);给蛇头动态分配空间,顺便初始化成绩;void initalbarrier(int,Node*,Node*);给障碍物初始化空间,同时调用食物重置函数;void barrierset(int,Node*,Node*);根据现在的关卡信息重置障碍物;int Block(Node*head) ;判断头是否出界char directioninput(char);方向控制键入函数;从键盘过去键入值;void snakeheadmove(char,Node*);根据键入的值执行蛇头移动;void addpoint(Node*,Node*);吃到食物时增加结点,蛇身增长;v

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1