贪吃蛇项目报告.doc
《贪吃蛇项目报告.doc》由会员分享,可在线阅读,更多相关《贪吃蛇项目报告.doc(69页珍藏版)》请在咨信网上搜索。
1、C语言项目设计报告 贪吃蛇游戏课程:标准C语言指导老师:XXX项目:贪吃蛇游戏班级:XXXX班成员:XXX、XXX、XXX、XXX姓名:XXX学号:XXXXXXX日期:2023/7/7目录一项目开发文档(3)1 项目基本分析(3) 1.1项目目的(4) 1.2功能描述(4) 1.3小组分工(7)2 总体设计报告(8) 2.1 函数分块(9) 2.2 接口设计(9)3 具体设计报告(14) 3.1 程序结构(14) 3.2 算法流程(17)4 操作指南(29) 4.1 运营及结果截图(29)5 项目总结(32) 5.1 优点与局限性(32) 5.2 我的收获与总结()(33)二项目代码(36)
2、贪吃蛇游戏一 项目开发文档 1 项目基本分析在我进行编写贪吃蛇游戏之前,我所做的必须是可行性分析,由于一旦进行贪吃蛇游戏项目的开发,就必须保证自己在规定的时间内可以独立的完整整个程序的所有功能,并且必须是最优的,因此,在开发贪吃蛇游戏之前,我必须要做的是可行性分析。通过查找相关文档和技术支持,了解了VS环境下的开发过程,熟悉了C语言的开发技巧,通过以下几个方面,进行可行性分析:1. 参考文献 :贪吃蛇游戏用户描述文档、在网上找了相关源代码,拟定自己可以在自己能力范围内开发出这个贪吃蛇游戏项目。2. 功能规定:在进行整个项目开发之前,我必须要做的就是拟定贪吃蛇游戏的重要功能,必须明确贪吃蛇游戏的
3、功能,由于要进行游戏功能可行性分析,通过自己的查阅相关资料,我拟定了贪吃蛇游戏的具体功能,详见后续部分具体设计。3. 性能需求:必须保证自己开发的贪吃蛇游戏可以整体尽也许做到高效快速,不占用大量的使用资源,由于我做的是一个应用窗体控制台的游戏开发项目,必须要考虑资源使用情况,规定尽也许少用资源,在有限的资源范围内实现最大的可运用价值。4. 运营环境:VS2023上编写并进行调试,通过安装软件,拟定可以进行项目程序的编写。5. 界面规定:采用Win7应用窗体标准界面,只需要使用键盘。6. 完毕期限,一个学期完毕整个系统,涉及程序的编写以及最终的调试,测试阶段。1.1 项目目的1 熟悉函数的调用与
4、程序的模块化设计,加深对所学知识的理解2 加强自学能力,碰到不了解的函数或者方法,通过图书及网络资源学习,提高学习能力3 完毕贪吃蛇游戏,通过小项目来检查一学期的学习效果,增长学习爱好1.2 功能描述该游戏在继承传统同类游戏规则的基础上,我们添加了我们自己的想法与功能,设计如下:游戏规则涉及蛇的运动范围、蛇的生命周期问题、分数记录、关卡判断。其中蛇的运动范围是一个15*15的数组呢,蛇运动的地图抽象成为一个15*15的二维整形数组,每个数组值代表一个小方块的坐标值,这样,蛇只能在规定好的二维数组内运动当蛇碰到数组左右边界值(我们在这里抽象成为上、下、左、右四个边界,其中上边界坐标值中纵坐标都是
5、0,横坐标任意,下边界为纵坐标是15,同理横坐标不变,左边界为横坐标为0,纵坐标任意,同理右边界为横坐标为15,纵坐标任意)时,宣告蛇生命周期结束(上下边界不限定),贪吃蛇死亡,这个是第一个规则;此外,当蛇自己吃到自己身体的某一部分时,也宣告游戏结束,在程序里通过循环判断蛇头下一个前进方向的节点是不是蛇身上的某一部分节点即可,假如是那么蛇死亡,否则继续运营游戏。 分数记录算法的思想是每次蛇吃到一个果实时,相加的分数为一个定值10来记录分数,这样可以随着游戏难度的增长,分数值也随之增多。关卡功能设立通过与分数相关联而体现的,初始化游戏分数为0,关卡障碍物选择由玩家键入,当玩家玩到一定的分数时(例
6、如是100)关卡加一,变为第二关,同时,蛇前进速度相应增长一个等级,障碍物的设立也变化,这样就实现了不同关卡,不同速度的贪吃蛇,从而增长了游戏的难度。 蛇: 1、可以实现贪吃蛇自动前线移动,也就是贪吃蛇可以“活动”的外观效果,根据相同的时间间隔,每一次将贪吃蛇自身的蛇头向前移动一个小格子,同时蛇尾向前移动一个小格子,移动方向为贪吃蛇行走的方向。2、每当一个食物时,蛇长度增长一格3、蛇头碰到自身时则游戏结束4、通过键盘来控制蛇的移动食物:1、 每当蛇吃到食物时,重置食物2、 吃到特定食物时,蛇的长度可以缩短边界和障碍物:1、 碰到边界和障碍物则游戏终止成绩记录:1、当贪吃蛇吃到果实时,玩家的分数
7、就应当随着吃到的果实而增长,增长的规则就是每一个吃到一个食物则乘以10得到分数。2、可以与历史成绩进行比较,显示高分排行榜输入与输出:1、 通过键盘选择障碍物关卡数2、 通过键盘选择蛇的速度3、 显示游戏指南4、 可以即时显示当次游戏的关卡数及游戏分数5、 显示游戏界面贪吃蛇的总体功能图1.3小组成员分工小组成员XXXXXXXXXXXX功能分析小组讨论,拟定项目题目和基本方案,成员提出想实现的功能,分析可行性讨论建议整理方案分工安排接口实现成绩,特效蛇的基本功能障碍物功能边界问题关卡递进最初源代码添加注释基本功能添加边界成绩存档食物重置特殊效果障碍物关卡功能 汇总整理测试改善2 总体设计报告考
8、虑到要实现的功能太多,所以宜采用模块化设计,把功能分块(在介绍功能时已经按这个方式介绍了),然后设计各个模块之间参数的传递,衔接起来,最后实现每个功能的算法。一方面我们定义了所需要的数据类型1. Node(结点)型定义用来作为蛇的头,身,尾的数据类型以及障碍物的数据类型每个成员的设计已在注释中注明,其中蛇和障碍物均用链表结构表达struct Node int x; /*蛇某一节的横坐标*/ int y; /*蛇某一节的纵坐标*/ struct Node *pre; /*蛇某一节的前驱结点*/ struct Node *next; /*蛇某一节的后继结点*/; 2Food(食物)型定义 用来储存
9、食物的横纵坐标及显示的字母3.Player(玩家)型定义储存玩家的姓名和成绩2.1函数分块 总的来说,我们把所有功能提成了以下几个大块: main snake food barrier and block grade共五个大块,分别实现相应功能,见名知意,各块的功能显而易见,依次实现重要的运营(main),蛇的控制、移动、增减(snake),食物的重置(food),障碍物的设立及边界的判断(barrier and block),成绩的记录与存档(grade)每个模块均存在一个CPP中,截图如下:2.2接口设计下面分别介绍每个大块的内部函数接口设计main: 主函数:int main()其中ma
10、in函数里定义了游戏必须的一些变量输入函数:int input(char*pname,int*barrierkind)第一个形参为char*类型,用来接受main函数里面的玩家名字,便于输入赋值,由于要进行写操作修改其值,所以定义成一级指针;第二个形参为障碍物类型,即初始化的障碍物分布,同样要在input里赋值,所以用int*型。返回值为速度值,是一个整数,游戏通过这个数来控制蛇前进的速度,所以定义为int屏幕显示函数:void screenshow(int score,int stage,Node*head,Node*firstbar,Food*food)要显示当前的分数和关卡,所以传两个整
11、型参数score和stage;又要通过二位数组扫描,根据横纵坐标来看输出“”(空格)还是蛇“ ”,或障碍物“”,或食物,所以要传结构体参数Node*和FoodSnake:蛇的初始化函数:void initalsnake(int*grade,Node*head,Node*rear)顺便把成绩也初始化,所以传了个int型参数grade;然后由于要修改main函数中Node*head目的空间的的横纵坐标,所以这里用了一个二级指针,否则,若设计成Node*型,则形参改的值只在该函数有效,对main函数里的head无影响(此处曾调试很久,在5.2.2心得体会里在具体说明)方向输入函数:char dire
12、ctioninput(char c)由键盘键入一个值,传回有效值,故返回值类型为char, 由主函数传过来而不内部定义时避免输入无效值时犯错,所以此处相称于输入无效值则还是原值(内部最后一句为return c)。蛇移动函数:void snakeheadmove(char c,Node*head)传前进的方向,为字母值,用char,头要移动,需要改值,所以用二级指针添加和删除结点函数:void addpoint(Node*head,Node*rear)void deletepoint(Node*head,Node*rear)由于用的是双向链表,所以要传头尾两个参数,需改值,故用二级指针Food:
13、食物重置函数:void foodreset(char c,Food*food,Node*head,Node*firstbar)当玩到最后蛇身较长时,重置多次也许还不行,所以会内定为在蛇前进方向的前两个出食物,所以要传前进方向,用char;需改变食物的横纵坐标及显示字母,故第二个参数用一级指针;要判断食物是否重置到蛇身或障碍物上,所以传两者参数,由于只是判断不需要改值,所以一级指针即可barrier and block:障碍物初始化函数:void initalbarrier(int barrierkind,Node*firstbar,Node*lastbar)要调用障碍物重置函数void bar
14、rierset(int barrierkind,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
15、和lastbar的目的空间的值,所以用二级指针;判断游戏结束函数:int Gameover(Node*head,Node*firstbar)需要判断头是否触到障碍物,所以传参数Node*;对判断结果进行记录,返回0或1,所以用int;Grade:成绩插入函数:void scorecompare(Player*top,Player*player)把该次的成绩与本来的前十名成绩进行比较,需要记录名字,所以传结构体Player*;历史成绩复制函数:void fileinital(Player*topplayer)由于要把文献中的历史成绩赋值给主函数的结构体数组,所以传一级指针Player*成绩存档函
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪吃 项目 报告
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【丰****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【丰****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。