游戏编程导论 Chapter-11_第1页
游戏编程导论 Chapter-11_第2页
游戏编程导论 Chapter-11_第3页
游戏编程导论 Chapter-11_第4页
游戏编程导论 Chapter-11_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、第11章 引擎案例贪食鱼游戏内容提纲 11.1游戏需求分析11.2 游戏总体设计11.2.1 游戏素材设计11.2.2 数据结构及数据类型定义11.2.3 游戏类设计11.3游戏代码实现11.3.1 资源加载类函数11.3.2 游戏状态更新类函数11.3.3 关卡处理函数11.3.4 游戏细节处理类函数11.3.5 引擎接口函数实现11.4游戏运行与发布11.4.1 游戏运行测试11.4.2 游戏项目发布第11章 引擎案例贪食鱼游戏本章将通过“贪食鱼”游戏来完整、实际地应用所构建的TinyEngine游戏引擎。作为第一个应用案例,就首先以无地图游戏入手。11.1 游戏需求分析“贪食鱼”游戏是一

2、款经典的小游戏,它由Sprout Games公司(该公司于2005年被纳入PopCap公司)开发;游戏的基本规则就是大鱼吃小鱼,所以也有人称之为“大鱼吃小鱼”游戏:玩家控制的鱼,一开始个头很小,只能吃那种最小的鱼,当吃的鱼达到一定数量,玩家的鱼就会长大,可以吃更大的鱼,到最终可以挑战游戏中最大的鱼鲨鱼王。本章要实现的“贪食鱼”游戏是借鉴该游戏的规则简化而来。具备完整游戏功能:如角色动画绘制、玩家角色控制、玩家吃小鱼、玩家被大鱼吃、游戏分值统计、玩家生命值奖励、游戏过关处理等等。为便于学习理解,游戏代码尽量简洁、清晰,可以在有限时间内完成。11.1 游戏需求分析具体来说,该游戏要实现以下具体功能

3、:1. 菜单功能本游戏菜单将采用图片制作菜单项。菜单将包括两种类型:一种是游戏开始的主菜单,具体菜单项将包括“开始游戏”、“游戏帮助”、“关于游戏”和“退出游戏”;另一种是游戏升级、通关及结束时的过渡菜单,根据不同情况,菜单项将包括:“下一关”或“重新开始”、“退出游戏”。2. 玩家角色控制功能本游戏玩家角色使用鼠标控制。随着鼠标移动,玩家角色会朝鼠标位置移动,当玩家角色的矩形中心点达到鼠标处,如果鼠标不再向新位置移动,角色将停留在鼠标处不动。玩家角色的移动方向会根据鼠标当前位置进行判断,例如鼠标在角色矩形区域以外正左侧,玩家角色自动向左移动,如果鼠标在矩形区域以外的左上角,玩家角色的将向左上

4、方向移动,以此类推。11.1 游戏需求分析3. NPC漫游及躲避功能游戏中的NPC将会在规定的矩形区域内自动漫游。如果到达边界处,NPC会自动朝其它随机方向继续移动。在移动过程中,如果检测到前进方向有玩家角色,NPC会自动躲避。4. 音乐、音效播放功能游戏进入主菜单界面,菜单背景音乐将自动播放;进入游戏界面后,菜单背景音乐停止,开始播放游戏背景音乐,并伴随水泡音效,以烘托游戏气氛。游戏过程中,如果玩家吃鱼得分或被大鱼吃掉,会伴有啃咬音效;另外,玩家吃鱼得分时还会伴有得分音效。当玩家角色被大鱼吃掉,如果生命值为0,游戏结束音效响起,游戏随之结束;如果游戏胜利通关,会伴随游戏胜利音效。当玩家角色吃

5、鱼达到一定数量,角色会伴随音效长大;如果游戏中出现快速游动的水母,它用来奖励玩家生命值,此时如果玩家角色去触碰水母,会有奖励音效,玩家生命值也随之加1。11.1 游戏需求分析5.游戏奖励功能本游戏实现了玩家生命值的奖励功能。游戏中会随机出现一只从左往右或从右往左快速游动的水母,如果玩家角色触碰到水母,生命值会加1。作为示范,本游戏只实现了这一种奖励功能,读者可以根据自己的设想举一反三实现其它类似功能,例如可以按照类似的技术为游戏增加其它游戏性的功能,如碰到某种对象会行动缓慢或者减分等。但更丰富的设计也意味着更多的代码,使用的技术却是类似的。6.游戏状态显示功能为了让代码精简,同时也受制于素材,

6、本游戏中主要以图标加文字的简单方式显示游戏过程中的基本状态信息,显示的信息包括:游戏总分、本关得分、玩家生命值、当前关等。另外,玩家吃鱼得分时,游戏界面上将显示快速移动的游戏分值,这是一种动态显示游戏得分状态的方式。11.1 游戏需求分析7. 游戏过关升级处理游戏中的玩家角色最初只能吃等级较低的小鱼,当吃鱼得分积累到一定数量后,玩家角色会长大,自身等级也会随之提高,然后就可以吃更高等级的鱼。当吃鱼得分积累到每关规定的分值后,游戏将进入下一关,此时游戏中将出现更多鱼类,升级后的玩家也将有更多类型的鱼可吃。当然,游戏难度也随之提高。每过一关,游戏中就会出现更高一级的鱼。游戏就在这种不断升级、难度不

7、断提高的过程中进行下去。如果玩家最终通过了游戏设定的全部关卡,也就意味着玩家取得了游戏最终胜利,也就是所谓通关。11.1 游戏需求分析8. 游戏帮助功能进入游戏主菜单界面后,会有一个“帮助”菜单项,该菜单项将提供游戏的操作说明。本游戏操作简单,也没有复杂游戏元素设计,游戏的操作说明自然就很简单。但作为一个完整游戏,同时也为了示范该功能设计,本游戏还是设计了帮助功能。9. 关于信息功能关于信息功能也是由主菜单界面中的菜单项提供的,本功能主要显示一些与本游戏相关的具体信息,如游戏名称、版本号、作者等等。这是一般游戏程序都具备的功能,在此设计该功能也是为了起到示范作用。11.2 游戏总体设计为了控制

8、代码量,游戏中只示范性地设计了5关。第一关:游戏中会出现两种鱼:一种是玩家可以吃的最低等级的鱼,另一种是玩家暂时不能吃的更高等级的鱼当玩家角色吃鱼得分积累到一定程度,玩家角色变大,也就是玩家级别提高,此时就可以吃另一种鱼了。当吃鱼得分超过关卡设定的标准,游戏将进入下一关第二关:除了会出现第一关的两种鱼,还会出现第三种更高等级的鱼,只有等玩家角色级别提高后,玩家角色才能够吃第三种鱼后续的关卡也都是按照这个逻辑来设计在每一关中,都会随机出现快速游动的水母,如果玩家角色触碰到了水母,其生命值会随之加1如果玩家在生命值大于0时被更高等级的鱼吃掉,则玩家生命值减1,游戏继续如果玩家在生命值为0时被吃掉,

9、游戏结束。如果玩家通过了游戏设定的全部5个关卡任务,就取得了游戏最终胜利,俗称游戏通关11.2 游戏总体设计11.2.1 游戏素材设计根据以上需求,游戏中至少要设计6种不同非玩家角色的鱼动画素材。此外,根据游戏需求分析,游戏需要的素材还包括:背景图片素材图标素材背景音乐音效素材11.2 游戏总体设计1.背景图片素材游戏使用的背景图片素材包括:(1)游戏菜单背景图片;(2)游戏背景图片;(3)游戏结束、游戏升级以及游戏胜利时的菜单背景图片由于游戏窗口的分辨率设定为1024 768,如果要让背景图片填满整个窗口,图片的分辨率必须大于或等于窗口分辨率。游戏背景图片的分辨率要求大于窗口尺寸,以便实现游

10、戏背景的滚动效果。11.2 游戏总体设计menu_bkg.jpg1024768菜单背景图片game_bkg.jpg16001200游戏背景图片,背景图片大于窗口,所以游戏中要实现背景滚动显示功能mid_bkg.png573471游戏结束、游戏升级以及游戏胜利时的菜单背景图片shell_btn.png188300菜单项图片,由两幅图片组成,上面的图片为菜单项正常状态,下面的图片为菜单项选中状态11.2 游戏总体设计2.图标图片素材Level.png4040当前关图标图片life.png4040生命值图标图片score.png4040本关分图标图片totalscore.png4040总得分图标图片

11、11.2 游戏总体设计3.帧动画素材player.png1090 288 218 144 10正常状态的玩家角色playersuper.png1090 288 218 144 10无敌状态的玩家角色tinyfish.png325 144 65 48 15等级为0的NPCclown.png664 170 166 85 8等级为1的NPCbluefish.png600 100 150 50 8等级为2的NPC11.2 游戏总体设计salmonfish.png560 104 140 52 8等级为3的NPChammerhead.png1800 284 360 142 10等级为4的NPCwhites

12、hark.png1520 360 380 180 8等级为5的NPCjellyfish.png360 120 60 60 12游戏奖励角色bubble.png25 25 25 25 1水泡,烘托气氛用11.2 游戏总体设计3.声音素材menumusic.wav00:00:04352kbps菜单背景音乐gamebckmusic.wav00:01:12352kbps游戏背景音乐mouseover.wav小于1秒176kbps鼠标在菜单项上移过的音效mousedown.wav小于1秒352kbps鼠标点击菜单项的音效bubble.wav00:00:09176kbps水泡音效enemybite.wav

13、小于1秒352kbpsNPC啃咬玩家角色的音效11.2 游戏总体设计playerbite.wav小于1秒352kbps玩家角色啃咬NPC的音效playereaten.wav小于1秒352kbps玩家被吃的音效playergrow.wav小于1秒352kbps玩家长大的音效或玩家生命值增加音效score.wav00:00:01352kbps吃鱼得分音效victory.wav00:00:04176kbps游戏通关音效gameover.wav00:00:03176kbps游戏结束音效11.2 游戏总体设计11.2.2 数据结构及数据类型定义根据本游戏特点,游戏中要对众多不同等级NPC素材进行管理,为

14、了让数据组织和操作更方便,有必要定义专门的结构体,在其中记录图像文件路径和名称、帧图宽高、移动速度、游戏分值、图片缩放比等信息可以将该结构体命名为LEVELINFO玩家吃鱼得分后,屏幕上会出现向上快速移动的分值文字效果如果玩家在短时间里吃到多条鱼,屏幕上会出现多个移动的分值文字只有当这些分值文字移出了屏幕以后才会消失。为方便实现该效果,定义名为SCORE的结构体,在其中记录文字坐标位置和分值本游戏每一关都有众多NPC,为了统一管理和操作这些NPC对象,使用T_Sprite*类型的vector容器来管理为了简化代码编写,将T_Sprite*类型的vector容器定义为更简短数据类型名。vSpri

15、teSet类型定义如下: typedef vector vSpriteSet;11.2 游戏总体设计11.2.3 游戏类设计游戏类是指从T_Engine类派生的子类,具体游戏功能需要在类中实现,故称为游戏类。根据游戏内容,将其命名为FishGame类动手编码前在VS2008开发环境中构建一个名称也为FishGame的新工程项目把到目前为止编写完成的最新引擎文件复制到项目的TinyEngine目录中将以上的图像素材和声音素材拷贝到项目的res目录中,其中表11-1、表11-2中的图像素材存放在res目录下的game目录中,表11-3中的图像素材存放在res目录下的sprite目录中,表11-4的

16、声音素材存放在res目录下的sound目录中创建FishGame.h头文件和FishGame.cpp源文件先在FishGame.h文件头部加入以下引擎头文件在FishGame.h文件中编写FishGame类定义代码(具体代码请参见教程)11.3 游戏代码实现总的来说, FishGame类中全部类成员函数由三类组成:(1)构造函数和析构函数(2)游戏功能处理函数(3)游戏引擎接口函数数量最多的功能处理函数承担了全部游戏细节实现的任务。根据各自功能,又可细分为:(1)资源加载类函数(2)状态更新类函数(3)关卡处理函数(4)游戏细节处理类函数11.3 游戏代码实现11.3.1 资源加载类函数负责游

17、戏中各种资源及类对象的加载,如角色、场景、图片、菜单以及声音等;包括:LoadPlayer()、LoadNpc()、LoadMap()、LoadImageRes()、LoadBubble()、LoadBonus()、LoadGameMenu()、LoadSound(),共8个具体实现代码请参见教程和案例工程代码11.3 游戏代码实现11.3.2 游戏状态更新类函数用来控制游戏中各种对象的状态,包括角色位置更新、角色动画帧序列更新、玩家生命值更新以及游戏奖励更新等;包括UpdatePlayerPos()、UpdatePlayerLife()、UpdateNpcPos()、UpdateBonus(

18、)、UpdateBubble()、UpdateScore()以及UpdateAnimation(),共7个。具体实现代码请参见教程和案例工程代码11.3 游戏代码实现11.3.3 关卡处理函数主要处理游戏中每关数据加载,以及每关结束后的关卡数据清理;与关卡处理相关的函数有两个,一个是加载游戏关卡数据的LoadGameLevel()函数,另一个是清除关卡数据的ClearGameLevel()函数。具体实现代码请参见教程和案例工程代码11.3 游戏代码实现11.3.4 游戏细节处理类函数主要包括游戏声音及音效播放、玩家升级处理、游戏信息显示以及NPC重复利用处理等共有5个函数,分别是UpgradePlayerLevel()、RegenerateNpc()、PlayGameSound()、DisplayInfo()和ReleaseDXBuffer()具体实现代码请参见教程和案例工程代码11.3 游戏代码实现11.3.5 引擎接口函数实现6个游戏引擎接口函数:GameInit()函数要对游戏类中各关键数据成员进行初始化,并将游戏状态设置为GAME_START等GameLogic()函数中要处理全部游戏逻辑,其中涉及玩家角色的逻辑处理、玩家角色以外的逻辑处理等GamePaint()函数根据GameState变量记录

温馨提示

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

评论

0/150

提交评论