




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
常州工学院学士学位设计PAGEPAGE30目录第一部分设计任务与调研 31.1、设计目标: 31.2、设计要求 31.3、设计内容: 31.4.技术路线(步骤与方法) 3第二部分设计说明 42.1、类的设计 42.2、游戏流程 52.2.1主流程 52.2.2游戏初始化 62.2.3游戏运行 72.2.4游戏结束 72.2.5生产精灵对象 82.2.6键盘按下事件 92.2.7键盘弹起事件 92.2.8精灵与精灵的碰撞 92.2.9世界边界碰撞事件 102.3完成类的定义 112.4实现SpriteFactory类 132.4.1游戏初始化 132.4.2键盘按下事件 142.4.3键盘弹起事件 152.4.5完成游戏运行 152.2.6精灵与精灵的碰撞 182.2.7精灵与世界边界的碰撞 192.2.8完成游戏结束 19第三部分设计成果 203.1设计编码图: 203.2游戏运行结果图 27第四部分结束语 28第五部分致谢 30第六部分参考文献 31
第一部分设计任务与调研1.1、设计目标:“大鱼吃小鱼,小鱼吃虾米”,这大概是每个人都会的关于食物链最朴素的描述。本游戏通过用MyEclipse来设计来是实现这个食物链。1.2、设计要求1.对游戏中所需类进行设计;
2写出源程序文件;
3.对游戏进行调试和分析1.3、设计内容:敌方有三类鱼(鲨鱼、橙色鱼和小黄鱼),每一类鱼的对象出现后,在游戏中处于随机自由移动状态,敌方大鱼能吃小鱼;主角为红鱼且红鱼只有一条,玩家通过键盘方向键控制移动,红鱼有两级状态,初始时处于低级状态,只能吃黄鱼,能被蓝鱼或鲨鱼吃掉。初级状态的红鱼经过重重险恶且吃掉一定数量的黄鱼升级后,能吃黄鱼和蓝鱼,但还是能被鲨鱼吃。1.4.技术路线(步骤与方法)游戏界面是一个游戏展现给玩家的平台,所以界面设计是否美观是很多玩家选择一款游戏的重要标准,游戏中界面设计和软件界面设计的要求是一致的,主要有以下几条要求[7]:1、界面美观2、界面条理3、符合玩家操作习惯(界面友好)在本界面中,包含玩家控制的鱼、自由移动的鱼、玩家信息及一个按钮文字,在本界面设计中,根据手机上的操作习惯,将按钮的位置设置在手机的右下角,玩家的信息设置在屏幕最上方和最右边,而将整个屏幕(包含按钮文字显示区域、玩家信息显示区域)作为游戏区域,以最大限度的利用手机上的屏幕空间,所以本游戏未从屏幕中划分出独立的游戏区域。对于简单的益智游戏,一般不需要设计滚屏,所以该游戏在设计界面上设计为简单的单屏游戏。游戏逻辑即游戏规则,是游戏编程中最核心的部分,也是最难实现的部分,在游戏程序的开发过程中,大部分时间都是用在游戏逻辑的实现上。游戏逻辑基于游戏数据结构,从程序开发角度来看,游戏逻辑就是对于游戏数据的规则变换。当然,这些数据的变换需要根据游戏规则进行实现。然后把最终变化的结果以界面的形式显示给最终用户,对于游戏程序来说也就是游戏玩家。进行游戏逻辑的设计,首先要把游戏规则分析出来,所谓游戏规则,就是在游戏中需要程序设计人员实现的规定和控制,这些可以根据游戏的功能进行实现。“大鱼吃小鱼”游戏需要实现的游戏规则如下:(l)游戏初始化(2)玩家控制的鱼的移动及方向控制(3)自由移动的鱼(4)大鱼小鱼的碰撞和处理在程序实际实现时,一般使用方法来组织游戏逻辑相关的代码,也就是将对应的游戏逻辑转换为一个函数或许多函数。由于以上逻辑都比较简单,所以在实际实现时都转换为一个方法。下面依次来讲解以上游戏逻辑的实现,并介绍实现时需要注意的一些问题。游戏操作指玩家以怎样的形式参与游戏,每个游戏的操作需要根据游戏的规则等进行设计,不过在设计游戏操作以前首先需要考虑的问题,这款游戏中有哪些是需要玩家进行参与的,然后才是以如何的形式进行参与,其次需要考虑不同平台以及不同设备上的操作特点,一定要满足硬件的要求。游戏操作设计的规则如下:1)、操作简单2)、操作方便3)、符合用户操作习惯4)、符合设备硬件要求第二部分设计说明2.1、类的设计游戏中能直接看到的精灵:玩家鱼、电脑鱼、玩家得分文本、玩家等级文本。其中,玩家得分和玩家等级只需要显示分数,可以直接使用CTextSprite类。玩家鱼、电脑鱼创建相应的类。可以从玩家鱼和电脑鱼抽象出一个鱼类,作为父类。鱼类继承CSprite类,通过CSprite类的方法操作精灵。创建一个游戏类,各个类之间的通信在游戏世界类中进行。本游戏是大鱼吃小鱼,该类称为鱼游戏类。创建一个精灵工厂类,用来生成各种精灵类的对象。这就是“工厂模式”。2.2、游戏流程2.2.1主流程游戏分四个状态:未开始、开始、运行和结束。CGameMain类是控制游戏流程的类,游戏屏幕每刷新一次,调用一次该类的GameMainLoop方法。GameMainLoop根据m_iGameState的值分别调用该类的GameInit、GameRun和GameEnd方法。这三个方法对应初始化游戏、游戏运行和游戏结束这三个状态。GameInit只执行一次。执行后修改游戏状态。屏幕刷新后,进入状态2,开始执行GameRun方法。当玩家积分>=0即玩家鱼不死的时候,GameRun一直被执行。玩家鱼死亡后,调用GameEnd执行一次,清除本局游戏数据,恢复游戏未开始状态。2.2.2游戏初始化完成游戏初始工作,界面上的工作:玩家积分和等级显示为0,创建玩家鱼并放置在指定位置,并且把玩家鱼对象加入到FishesWorld对象中。2.2.3游戏运行游戏运行中,每刷新一次屏幕,需要根据最新数据,更新玩家得分和等级,移动玩家鱼,删除被吃掉的电脑鱼,当达到相应的时间间隔时,创建新的电脑鱼。2.2.4游戏结束将游戏中剩余的精灵删除,包括删除精灵本身和集合中对应的对象。重新显示游戏开始的提示图片。2.2.5生产精灵对象本游戏中的玩家鱼、电脑鱼这两种精灵类的对象都在精灵工厂类中产生。根据参数确定生产何种精灵。右下图是玩家飞机的生产过程,主要是创建对象,复制模板,并设置几个基本属性(碰撞、世界边界、初始位置、初始速度)。2.2.6键盘按下事件本游戏中,游戏状态为0时,按下空格键,游戏状态转为1。游戏状态为2时,玩家按下了WSAD键,分别设置玩家鱼的上下左右速度。2.2.7键盘弹起事件本游戏中,游戏状态为2时,玩家松开WSAD键,设置玩家飞机对应方向上的速度为0。2.2.8精灵与精灵的碰撞本游戏中,玩家鱼设置为发送碰撞,电脑鱼设置为接收碰撞。精灵碰撞时,如果电脑鱼等级比玩家鱼高,则玩家鱼减少积分,反之,玩家鱼增加积分。2.2.9世界边界碰撞事件本游戏中,游戏状态为2时,玩家鱼碰到边界停止继续游动。电脑鱼碰到边界,设置该鱼的生命值hp为0。获得该鱼的价值,从玩家鱼当前的得分中减去该值。2.3完成类的定义根据下方表格,完成以下各个类的定义。其中,set和get方法在当前任务中实现,其他方法的实现留到后面完成。鱼类:Fish继承自CSprite类属性privateintiHp鱼的生命值privateintiGrade鱼的等级privateintiDir鱼的方向privatefloatfSpeedX鱼X轴方向移动速度privatefloatfSpeedY鱼Y轴方向移动速度privatefloatfPointX鱼X轴方向上的位置privatefloatfPointY鱼Y轴方向上的位置方法publicintgetHp()获得鱼的生命值publicvoidsetHp(constintHp)设置鱼的生命值publicintgetGrade()获取鱼的等级publicvoidsetGrade(constintgrade)根据参数设置鱼的等级publicfloatgetMoveSpeedX()获得鱼X轴方向上速度publicvoidsetMoveSpeedX(floatspeedX)设置鱼X轴方向上速度publicfloatgetMoveSpeedY()获得鱼Y轴方向上速度publicvoidsetMoveSpeedY(floatspeedY)设置鱼Y轴方向上速度publicvoidsetDirection(floatdir)根据参数设置鱼的方向publicfloatgetDirection()获取鱼的方向publicfloatgetPointX()获得鱼在X轴上的位置publicvoidsetPointX(constfloatfPointX)设置鱼在X轴上的位置publicfloatgetPointY()获得鱼在Y轴上的位置publicvoidsetPointY(constfloatfPointX)设置鱼在Y轴上的位置publicvirtualvoidmove(intikey)=0鱼的移动方法玩家鱼类:PlayerFish继承自Fish类属性privateintiPlayerScore玩家鱼的积分方法publicintgetPlayerScore()得到玩家积分publicvoidsetPlayerScore(intscore)设置玩家积分publicvirtualvoidmove(intikey)玩家鱼移动方法publicvoidstopMove(intikey)玩家鱼停止移动方法publicvoideat(Computer*pFish)玩家鱼吃电脑鱼的方法publicintplayScoreTransferLvel()根据玩家鱼积分得到玩家鱼响应的等级电脑鱼类:ComputerFish继承自Fish类属性privateintvalue电脑鱼的价值方法publicintgetValue()获取电脑鱼价值publicvoidsetValue(intvalue)设置电脑鱼价值publicvirtualvoidmove()电脑鱼移动精灵工厂类:SpriteFactory属性privatestaticintsId静态成员变量。缺省值为0,每复制一个精灵时递增一次,用于作为新生成的精灵名称的后缀。例如:fish1,fish2,fish3方法publicstaticFish*getFish(intiType)获取生产出的精灵。iType:1–玩家鱼2–电脑鱼鱼的世界类:FishWorld属性privatePlayersFishplayersFish玩家鱼privatevector<ComputerFish*>computerFishs电脑鱼集合publicstaticconstintMAX_COMPUTERFISH_NUM最多电脑鱼数量privatefloatrefreshRate电脑鱼刷新时间间隔privatefloatdeltaTimeCount当前累计时间privateCTextSprite*textLevel游戏等级文本精灵privateCTextSprite*textScore玩家积分文本精灵PrivateCTextSprite*gameStart开始精灵PrivatefloatfSpeedX电脑鱼在X方向上的速度PrivatefloatfSpeedY电脑鱼在Y方向上的速度方法publicvoidsetRefreshRate(floatrefreshRate)设置电脑鱼刷新时间间隔publicfloatgetRefreshRate()得到电脑鱼刷新时间间隔publicfloatgetDeltaTimeCount()得到当前累计时间publicvoidsetDeltaTimeCount(floatdeltaTimeCount)设置当前累计时间publicCTextSprite*getTextStarGame()得到开始游戏文本精灵publicvoidsetTextStarGame(CTextSprite*textStarGame)设置开始游戏文本精灵publicCTextSprite*getTextLevel()得到玩家鱼等级文本精灵publicvoidsetTextLevel(CTextSprite*textLevel)设置玩家鱼等级文本精灵publicCTextSprite*getTextScore()得到玩家鱼积分文本精灵publicvoidsetTextScore(CTextSprite*textScore)设置玩家鱼积分文本精灵publicPlayersFish*getPlayersFish()得到玩家鱼publicvoidsetPlayersFish(Fish*playersFish)设置玩家鱼publicvector<ComputerFish*>getComputerFishs()得到电脑鱼集合publicvoidsetComputerFishs(vector<ComputerFish*>*computerFishs)设置电脑鱼集合publicComputerFish*findComputerFishByName(constchar*fName)根据名字在电脑鱼集合中查找响应的电脑鱼publicFish*addFish(intkey)添加一条电脑鱼publicintgetRandomByGrade()根据玩家鱼的当前等级返回一个随机值,用于控制在不同等级下出现鱼的种类以及比例publicvoidsetComputerFishSpeadByGrade(ComputerFish*cFish)设置电脑鱼移动速度根据鱼的等级在Fish类中定义一些宏,在程序中尽量使用这些常量,而不是直接用数值。这样,既有利于代码的阅读,又便于修改。2.4实现SpriteFactory类参考“游戏流程”中“生产精灵对象”一节,完成SpriteFactory类的方法。对于玩家鱼,初始速度设为0,初始位置在游戏屏幕下方边界的中间位置,世界边界设置为屏幕大小(可以通过CSystem类的GetScreenBottom等方法来设置位置)。设置等级为0,玩家得分为0,。玩家鱼设置为发送碰撞。世界边界碰撞模式为停止。电脑鱼初始速度向左,等级高的鱼速度相对较快所拥有的价值较高,等级低的鱼速度相对较慢所拥有的价值较低。初始位置应该位于屏幕右方,电脑鱼设置为接收碰撞。从相应的电脑鱼模板复制精灵,命名方式:模板名称+sId。2.4.1游戏初始化在CGameMain类的GameInit方法中完成游戏初始化。2.4.2键盘按下事件在CGameMain类的OnKeyDown方法中完成。键盘按下处理两个事件:一个是游戏的开始;一个是玩家鱼的上下左右移动。完成该任务后,运行程序。2.4.3键盘弹起事件在CGameMain类的OnKeyDown方法中完成。完成任务四后按下键盘相应键鱼儿被设置了移动速度,但当松开后就应该取消设置的移动速度。2.4.5完成游戏运行在CGameMain类的GameRun方法中完成游戏运行代码。这三个函数需要自行添加,在定义类时并没有加入。完成FishWorld中更新文本精灵数据的方法。完成FishWorld中更新玩家数据的方法。完成FishWorld中更新电脑鱼的方法完成FishWorld中删除HP为0的电脑鱼的方法完成FishWorld中添加电脑鱼的方法运行游戏,这时候,可以看见不断有电脑鱼出现,并且当我们按下W,S,A,D键时玩家鱼也会随之移动。2.2.6精灵与精灵的碰撞在上一个任务中,即使玩家鱼碰到电脑鱼也不会把电脑鱼吃掉,是因为我们没有处理精灵的碰撞事件。在本任务中,我们通过精灵与精灵的碰撞事件来解决上述问题。在CGameMain类的OnSpriteColSprite方法中完成代码。该方法有两个参数,一个是szSrcName,表示发送碰撞的精灵的名称;一个是szTarName,表示接受碰撞的精灵的名称。根据这两个精灵的名称,可以判断碰撞的精灵是什么类型(因为创建精灵时,命名有规则)。2.2.7精灵与世界边界的碰撞在创建敌机精灵和子弹精灵对象时,我们设置了它们的世界边界,以及与世界边界碰撞模式。当它们飞出各自的世界边界时,就会发生精灵与世界边界碰撞事件,对于的方法是CGameMain类中的OnSpriteColWorldLimit方法。对于碰到世界边界的电脑鱼,我们需要删除此精灵,并从集合删除相应的节点。本任务的效果主要是优化程序,避免产生过多无用对象,占用电脑资源。2.2.8完成游戏结束当玩家鱼的积分<0时,一局游戏结束。对应的方法是CGameMain类的GameEnd方法。然后重新显示“空格开始”图片,游戏环境又重新回到未开始状态。第三部分设计成果3.1设计编码图:BackGround类GoldFish类HuJing类MyFish类MainFrame主界面类3.2游戏运行结果图第四部分结束语踉踉跄跄地忙碌了一个月,我的毕业设计课题也终将告一段落。点击运行,也基本达到预期的效果,虚荣的成就感
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初三物理全套试题及答案
- 综艺传媒面试题及答案
- 生态移民面试题目及答案
- 育婴师情感支持与教育方法试题及答案
- 药品流通领域的知识点试题及答案
- 网站内容编辑试题及答案
- 药剂考试知识体系构建试题及答案
- 提升母猪护理技能的途径试题及答案
- 激光技术质量标准探讨试题及答案
- 六年级语文下册第二组口语交际感兴趣的民风民俗教案新人教版
- 自愿离婚的协议范本5篇
- 模拟考保安证试题及答案
- 2025-2030中国连裤袜和紧身裤行业市场发展趋势与前景展望战略研究报告
- 冀教版五年级下册求最大公因数练习200题及答案
- 2024年国家林业和草原局直属单位招聘考试真题
- 2025年上海杨浦城市建设投资集团有限公司招聘笔试参考题库附带答案详解
- 国家安全教育日知识竞赛考试题库400题(含答案)
- 学生心理健康一生一策档案表
- 网球裁判考试试题及答案
- 国家义务教育质量监测八年级美术样卷
- 化学计量(5大易错点)-2025年高考化学复习易错题(含解析)
评论
0/150
提交评论