《游戏策划于开发方法》课件-第9章 游戏开发方法_第1页
《游戏策划于开发方法》课件-第9章 游戏开发方法_第2页
《游戏策划于开发方法》课件-第9章 游戏开发方法_第3页
《游戏策划于开发方法》课件-第9章 游戏开发方法_第4页
《游戏策划于开发方法》课件-第9章 游戏开发方法_第5页
已阅读5页,还剩91页未读, 继续免费阅读

下载本文档

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

文档简介

游戏策划与开发方法第9章游戏开发方法学习目标(1)掌握游戏开发的理念与流程(2)了解常用游戏编辑器的功能(3)理解游戏开发的常用算法和设计模式(4)掌握游戏开发的版本与里程牌的制订(5)掌握游戏中人工智能的基本元素和状态机制9.1游戏程序开发理念游戏是一个不断按某种逻辑更新各种数据的过程,基本流程是一个连续的循环,不断地按某种逻辑来绘制新的图像,并刷新画面。游戏类如同一个带有前置终端的实时数据库,该终端实时地接受用户输入的各种交互指令,取出相应的数据,并将这些数据以各种形式展现给玩家。9.1游戏程序开发理念图9-1游戏运行流程9.1游戏程序开发理念

游戏也是一个由“逻辑”和某些“数据”构成的结合体,主要体现在以下三点:(1)数据驱动理念

“数据”起到描述性和修饰性的作用,主要由程序设计人员处理。(2)数据驱动的基本策略

专门设计和实现一系列的“数据”获取和管理工具,包括声音的处理程序、绘画工具等,以提高艺术创作人员的工作效率。(3)软件工程中的原型法都是设计游戏软件的有效方法

可玩性测试的原型系统专门用于检验游戏设计的合理性和用户的可接受程度;用户界面的原型系统检查玩家如何与游戏进行交互;各个子系统的原型系统测试该子系统的功能;算法测试的原型系统可用来检查各种算法。9.2游戏项目开发流程开发具有网络服务器端游戏,一般分以下四个阶段:(1)筹备阶段:筹建团队,确定项目的基本方向;(2)原型阶段:实现游戏原型,发布Alpha测试版,以验证和调整预定的方向;(3)发布阶段:发布游戏的Beta测试版,供内部封闭测试,做上线前的最后准备;(4)迭代阶段:完成对Beta测试版的修改,上线后按迭代周期持续开发和调优产品。9.2游戏项目开发流程在以上阶段中,要注意以下问题:(1)角色:定义一些角色,规定其工作权力和责任,避免过度讨论或盲进;(2)交付物件标准:按照一定标准交付每个角色的工作成果,避免在工作链条中出现较多误差;(3)工作方法细节:游戏开发是一个涉及多个专业的复杂过程,必须要遵守过程中的规范和要求,否则将会严重降低开发效率。9.2游戏项目开发流程投资人:根据市场状况和投资预期,提出商业目标和项目邀约,和制作人讨论并审核确定《产品方

向》,制作《投资计划》,按计划安排资金投放,并承担投资后果。制作人:根据投资人的商业目标,整理和组织市场调查数据和《竞品资料》,制订《产品方向》。根

据《投资计划》组建核心团队。核心团队:一般由制作人和主程、主策、主美组成,有些时还包括项目经理。项目经理:负责制订工作计划和监督进度,安排各种资源。9.2.1筹备阶段(1)角色定义9.2游戏项目开发流程《投资计划》:由时间、金额、项目进度检查标准三列组成的一个表格。《产品方向》:一个具体的文档,记录产品概念所依据的市场状况、竞品的情况;也记录了项目产品的基本情况,以及市场推广和运营的基本思路。《竞品资料》:罗列所有主要竞争对手的产品情况,包括产品市场数据、开发方案、评测资料和用户反馈等。需要由制作人持续更新关注并随时整理添加。9.2.1筹备阶段(2)交付物件9.2游戏项目开发流程

1)产品概念讨论方法针对用户特性、针对竞品,通过竞争产品的玩家感受来了解玩家心理。不用关注产品细节,尽量用一些简单明确的概念来代替。2)团队缺人对策招聘渠道首选朋友圈,其次是毕业生和培训机构,最后是网上投递简历和各种高校的招聘会。3)时间控制会议时间需要特别控制,明确议题,严格遵守议题议程。9.2.1筹备阶段(3)重点注意9.2游戏项目开发流程项目主策划:提出产品原型的概念,交付《项目总体设计》,并协助原型开发,突出产品特点。项目主程序:选择技术方案,定义美术、策划资源的技术标准。搭建开发环境,编写产品原型。项目主美工:选择美术风格,在策划和技术的共同讨论下,确定各美术组件的基本技术标准。项目经理:负责组织信息共享,一起讨论和评审各阶段产品,以确保工作顺利开展。9.2.2原型阶段(1)角色定义9.2游戏项目开发流程《项目总体设计》:规定游戏的题材、玩法、收费模式等,确定游戏的重点乐趣和表现特点。《美术风格指导》:用实例原画图来规定整体美术风格。《美术资源格式标准》:对游戏原型的美术资源格式做出标准规定。《技术方案选型方案》:开发游戏所用的客户端和服务器端引擎、框架版本;程序的基本模块代码

结构;项目文件目录规范;测试和CI方案;技术难点的预设解决方案。可运行的原型产品:突出表现游戏核心玩法和美术风格的程序。开发环境:SVN服务器地址、BUG跟踪系统地址、IDE选择产品和版本、开发和测试的内网服务器

和演示用外网服务器。9.2.2原型阶段(2)交付物件9.2游戏项目开发流程原型开发阶段主要目的是验证产品的题材和玩法的融合是否合适、美术风格和技术实现是否能达到策划初始目标、有没有一些难以解决的基本障碍等基本问题。需要特别注意开发原型所需要耗费的资源制作和逻辑编写时间。从一开始就要积累和确立各工序的交付标准,需要预先沟通美术草图规范并签名,需要确定美术资源格式,需要设置游戏原型的测试环境。9.2.2原型阶段(3)重点注意9.2游戏项目开发流程客户端开发:开发和优化客户端代码、单元测试用例和相关文档。完善客户端程序打包、发布的CI流程。服务器端开发:开发服务器端代码、单元测试用例和相关文档,维护项目数据库,安装和部署测试环境。测试开发:维护和管理CI系统,监督运行单元测试用例。开发专项测试,例如性能测试、自动化测试等。9.2.3发布阶段(1)技术开发团队9.2游戏项目开发流程《策划需求文档》:重点说明要达到的产品目标,使用的主要设计手段。《策划案》:包括游戏流程图、GUI草图和需要配置的游戏数据项目、美术图量表以及风格参考等。《草图》:包括美术风格参考和UI构图。《技术设计方案》:包括代码模块命名以及职责、代码结构模式及关系和重点技术问题的解决方法。《美术资源格式》:包括文件名和路径规则、文件格式、精度、尺寸或其他更细节的内容。《游戏数据格式》:包括库名、表名、字段解析和字段内容结构等。《BUG报告单》:包括策划案ID、重现步骤和现象等。9.2.3发布阶段(2)交付物件9.2游戏项目开发流程建立稳定完整的版本开发流程,各交付件标准的严格遵守和流程监控。项目经理需要组织对于流程、标准的讨论和最终确定,并且监督执行。根据不同游戏的差异随时应对不同的策划案,建立流程标准。另外,需要安排宣传资料、测试环境、运维工具等工作。与运营、运维、客服人员做好沟通和交接准备。9.2.3发布阶段(3)重点注意9.2游戏项目开发流程9.2.4迭代阶段(1)开发团队依照迭代标准开发所需内容。(2)运维团队运营人员:负责推广、发行工作,给运维人员提供产品部署的技术资料。客服人员:辅助游戏推广,负责玩家咨询、故障报告、投诉处理、事故安抚等工作。运维人员:负责游戏的部署和监控,开发管理运维工具,准备硬件资源和运行环境。运营开发人员:开发客服系统、数据统计报表、活动系统、官方网站等给运营人员使用。9.2游戏项目开发流程《版本发布计划》:每个版本开始开发前,都需要编写此计划。。《版本发布说明》:每个版本进入内测后,由开发团队编写并提供给运营人员。《运营计划》:运营人员根据每个版本提交此文档。《产品部署、升级方案》:由开发人员提供给运维人员的技术部署方案。《产品统计需求》:由运营人员交给运营开发人员,定义统计报表的格式和统计周期,描述表头的含义。9.2.4迭代阶段(3)交付物件9.2游戏项目开发流程

通常游戏的持续更新需要遵循版本设定规范。9.2.4迭代阶段图9-2游戏版本设定规范(4)重点注意9.2游戏项目开发流程

由于开发的内容有长有短,所以开发过程中的代码必定要维护多套版本分支,这需要在SVN上做严格的定义。9.2.4迭代阶段图9-3版本分支定义(4)重点注意9.3游戏编辑工具在设计和开发游戏的过程中,需要用到搭建场景、处理模型、动画特效、管理声音等各种各样的工具。如果项目比较大,开发周期比较长,甚至要有专门开发的版本控制与管理工具。地图编辑器是一种所见即所得的游戏地图制作工具,用于创建、编辑、存储和管理游戏地图数据。游戏程序(客户端和服务器)通过地图数据构建游戏场景,然后将其呈现给玩家。9.3.1地图编辑器图9-4地图编辑器界面9.3游戏编辑工具(1)功能包括地图制作和地图资源管理两部分。地图制作主要包括地表生成、物体摆放、属性设置和地图数据输出;地图资源管理包括地图物体编辑、地图物体属性设置和资源数据输出。(2)应用用计算机图形技术对游戏虚拟环境的模拟实现,一般是建立在游戏引擎之上,编辑器的对象模型和资源格式受到游戏引擎限制。9.3.1地图编辑器9.3游戏编辑工具(3)地形编辑器是地图编辑器的主要模块,用于设计和编辑地形、放置单位和装饰物。9.3.1地图编辑器图9-5地形编辑器界面9.3游戏编辑工具(3)地形编辑器

9.3.1地图编辑器

地形面板:制作出高地、低谷、斜坡、水、起伏地面等各种地形地貌;

单位面板:在地图上放置所有玩家及各种建筑单位、生物单位及物品;

地形装饰物面板:在地图上放置各种地形装饰物;

镜头面板:依附触发器而存在,在地图上放置镜头,可以制作过场动画。

地区面板:在地图上划分一块区域,设置区域属性。9.3游戏编辑工具(4)通用编辑器9.3.1地图编辑器1)TiledStudio

用于创建和编辑2D游戏地图,最大的特点是可以编辑区块,支持自定义地图(2D地图)输出格式和地图层次划分等功能,但不支持2.5D地图。支持地图分层,可自定义对象图层。2)Mappy基于区块的通用地图编辑器,支持2D和3D地图。Mappy提供了多种开发语言版本,缺少快捷工具栏,使用不方便,运行速度慢,在编辑较大的地图时易操作性较差。3)Mepper基于区块的Java开源地图编辑器,当前仅支持2D、2.5D、整图地图和分块地图。有功能比较完善的资源管理系统,支持复合区块,自带边缘生成算法,用于地表边缘的自动生成。9.3游戏编辑工具触发事件编辑器是地图编辑器中最高级和最强大的部分。游戏中的各种事件、任务、电影、声音等全都是用触发器制作的。9.3.2事件编辑器图9-6触发事件编辑器界面9.3游戏编辑工具新类:仅用作给触发器分类;新触发器:在分类中建立一个新的触发器;新触发器注释:仅用作分隔及注释触发器;允许触发器:允许使用此触发器;初始打开:初始触发器为打开;分类是注释:将分类变成注释类型变量。9.3.2事件编辑器触发事件编辑器上的右键菜单指令:9.3游戏编辑工具声音编辑器的作用就是管理声音,用于提供给触发事件编辑器使用。9.3.3声音编辑器图9-7声音编辑器界面9.3游戏编辑工具声音编辑器中的声音类型:内部声音:游戏内的声音。外部声音:游戏中没有包含的声音。声音编辑器的菜单指令有:播放、停止所有回放、用作声音、

用作音乐、替代内部声音、输出声音。9.3.3声音编辑器9.3游戏编辑工具文件、格式、长度、变量名、循环、3D音效、超出范围则停止、音量、淡入率、淡出率、播放速度、效果、最小距离、最大距离、淡出距离。9.3.3声音编辑器

使用这些声音必须通过触发事件编辑器,当导入声音或者选择内部声音之后,进入触发事件编辑器,选择“播放声音”或者“播放音乐”。声音属性包括:9.3游戏编辑工具物体编辑器又叫对象编辑器,允许自定义单位、物品、装饰物、技能和升级。9.3.4物体编辑器图9-8物体编辑器界面9.3游戏编辑工具战役编辑器允许用户自定义和管理通用战役选项。9.3.5战役编辑器图9-9战役编辑器界面9.4游戏开发算法在游戏开发中,常用的算法有如下几种:(1)快速排序算法使用分治法策略把一个串行(list)分为两个子串行(sub-lists)。9.4.1游戏常用算法(2)堆排序算法指利用堆数据结构所设计的一种排序算法。(3)归并排序算法是建立在归并操作上的一种有效的排序算法,是采用分治法的一个非常典型的应用。9.4游戏开发算法9.4.1游戏常用算法(4)二分查找算法是一种在有序数组中查找某一特定元素的搜索算法。(5)线性查找算法

从某n个元素的序列中选出第k大(第k小)的元素,保证在最坏情况下仍为线性时间复杂度。(6)深度优先搜索

沿着树的深度遍历树的节点,尽可能深的搜索树的分支(7)广度优先搜索

是一种图形搜索算法,同样属于盲目搜索。9.4游戏开发算法9.4.1游戏常用算法(8)戴克斯特拉算法使用广度优先搜索解决非负权有向图的单源最短路径问题。(9)动态规划算法把原问题分解为相对简单的子问题的方式以求解复杂问题。(10)朴素贝叶斯分类算法

是一种基于贝叶斯定理的简单概率分类算法。(11)A*算法

是一种静态路网中求解最短路径最有效的直接搜索方法。9.4游戏开发算法在游戏开发中常用的设计算法主要有迭代法、穷举搜索法、递推法、贪婪法、回溯法、分治法、动态规划法等。另外,为了更简洁的形式设计算法,又经常采用递归描述算法。9.4.2游戏算法设计9.4游戏开发算法9.4.2游戏算法设计(1)迭代法

基本思想:用计算机解决问题的一种基本方法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。

基本步骤:步骤1:确定迭代变量;步骤2:建立迭代关系式;步骤3:对迭代过程进行控制。9.4游戏开发算法9.4.2游戏算法设计迭代法的问题应用:【问题】欧几里得算法求两个数的最大公约数【分析】

验证过程:a可以表示成a=kb+r,则r=amodb。假设d是a,b的一个公约数,则有a%d==0,b%d==0;而r=a-kb,因此r%d==0,因此d是(b,amodb)的公约数。同理,假设d是(b,amodb)的公约数,则b%d==0,r%d==0,但是a=kb+r,因此d也是(a,b)的公约数。

欧几里德算法实现的过程就是一个反复迭代执行,直到余数等于0才停止运行的步骤。实现过程中可以采用迭代控制的第二种方法,通过非固定次数的循环实现。9.4游戏开发算法9.4.2游戏算法设计(2)穷举搜索法

基本思想:根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。

基本方法:顺序列举:指答案范围内的各种情况很容易与自然数对应,甚至就是自然数,可以按自然数的变化顺序去列举。排列列举:列举所有答案所在范围内的排列。组合列举:当答案的数据形式为一些元素的组合时,往往需要用组合列举。9.4游戏开发算法9.4.2游戏算法设计穷举法的问题应用:【问题】将A、B、C、D、E、F这六个变量排成如图9-10所示的三角形,这六个变量分别取1-6的整数且均不相同。求使三角形三条边上的变量之和相等的全部解。图9-10穷举法示例【分析】

程序引入变量a、b、c、d、e、f,并让它们分别顺序取1至6的整数,在互不相同的条件下,测试由排成的三角形三条边上的变量之和是否相等。如相等则输出满足要求的排列,当这些变量取尽所有的组合后,程序就可以得到全部的可能解。9.4游戏开发算法9.4.2游戏算法设计(3)递推法

基本思想:递推法是解决物体与物体发生多次作用后的情况,即当问题中涉及相互联系的物体较多并且有规律时,可以根据题目特点应用数学思想将所研究的问题归类,然后求出通式。

阶梯步骤:设要求问题规模为N的解。当N=1时,解或者是已知项,或者能非常方便地得到解。当得到问题规模为i-1的解后,由问题的递推性质,能从已求得的规模为1,2,…,i-1的一系列解,构造出问题规模为I的解。程序可从i=0或i=1出发,重复由已知至i-1规模的解。通过递推,获得规模为i的解,直至得到规模为N的解。9.4游戏开发算法9.4.2游戏算法设计递推法的问题应用:【问题】阶乘计算。编写程序,对给定的n(n≦100),计算并输出k的阶乘k!(k=1,2,…,n)的全部有效数字。【分析】由于要求的整数可能大大超出一般整数的位数,所以程序中使用一维数组存储长整数。存储长整数的数组,每个元素只存储长整数的一位数字。例如,有m位长整数N用数组a[]存储N=a[m]×10m-1+a[m-1]×10m-2+…+a[2]×101+a[1]×100,数据存储时采用a[0]存储长整数N的位数m,即a[0]=m。按上述约定,数组的每个元素存储k的阶乘k!的一位数字,并从低位到高位依次存于数组的第二个元素、第三个元素……。例如,5!=120,在数组中的存储形式为:3021……,其中元素3表示长整数是一个3位数,接着是低位到高位依次是0、2、1,表示成整数120。

计算阶乘k!,可采用对已求得的阶乘(k-1)!连续累加k-1次后求得。例如,已知4!=24,计算5!,可对原来的24累加4次24后得到120。9.4游戏开发算法9.4.2游戏算法设计(4)递归法

基本思想:递归是一个过程或函数,在其定义或说明中有直接或间接调用自身的一种方法,把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题后求解。

基本步骤:递归算法的执行过程分递推和回归两个阶段。递推阶段:把较复杂的问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)后求解。回归阶段:当获得最简单情况的解后,逐级返回,依次得到稍复杂问题的解。在编写递归函数时要注意,函数中的局部变量和参数只是局限于当前调用层,当递推进入“简单问题”层时,原来层次上的参数和局部变量便被隐蔽起来。在一系列“简单问题”层,都各有自己的参数和局部变量。9.4游戏开发算法9.4.2游戏算法设计递归法的问题应用:【问题】编写计算斐波那契(Fibonacci)数列的第n项函数fib(n)。【分析】

斐波那契数列为:0、1、1、2、3、……,即:fib(0)=0;fib(1)=1;fib(n)=fib(n-1)+fib(n-2)(当n>1时)。9.4游戏开发算法9.4.2游戏算法设计(5)回溯法

基本思想:回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。当发现当前候选解不可能是解时,就选择下一个候选解;如果当前候选解除了还不满足问题规模要求外,满足其他所有要求,则继续扩大当前候选解的规模,并继续试探。如果当前候选解满足包括问题规模在内的所有要求时,该候选解就是问题的一个解。

基本步骤:一边建树,一边遍历该树。采用的非递归的方法设计,即在遍历状态空间树的过程中,一般要用到栈的数据结构。。9.4游戏开发算法9.4.2游戏算法设计回溯法的问题应用:【问题】组合问题。问题描述:找出从自然数1,2,…,n中任取r个数的所有组合。【分析】采用回溯法找问题的解,将找到的组合以从小到大顺序存于a[0],a[1],…,a[r-1]中,组合的元素满足两个条件:①a[i+1]>a[i],后一个数字比前一个大;②a[i]-i<=n-r+1。按回溯法的思想,求解过程可以叙述如下:首先放弃组合数个数为r的条件,候选组合从只有一个数字1开始。因该候选解满足除问题规模之外的全部条件,扩大其规模,并使其满足上述条件①,候选组合改为1,2。继续这一过程,得到候选组合1,2,3。该候选解满足包括问题规模在内的全部条件,因而是一个解。在该解的基础上,选下一个候选解,因a[2]上的3调整为4,以及以后调整为5都满足问题的全部要求,得到解1,2,4和1,2,5。由于对5不能再作调整,就要从a[2]回溯到a[1],这时,a[1]=2,可以调整为3,并向前试探,得到解1,3,4。重复上述向前试探和向后回溯,直至要从a[0]再回溯时,即表示已经求解完成。9.4游戏开发算法9.4.2游戏算法设计(6)贪婪法

基本思想:贪婪法是一种不追求最优解,只希望得到较为满意解的方法。贪婪法一般可以快速得到满意的解,因为省去了为找最优解要穷尽所有可能而必须耗费的大量时间。。

基本步骤:步骤1:建立数学模型来描述问题;步骤2:把求解的问题分成若干个子问题;步骤3:对每一子问题求解,得到子问题的局部最优解;步骤4:子问题的解局部最优解合成原来问题的一个解。9.4游戏开发算法9.4.2游戏算法设计贪婪法的问题应用:【问题】装箱问题。装箱问题可简述为:设有编号为0、1、…、n-1的n种物品,体积分别为v0、v1、…、vn-1。将这n种物品装到容量都为V的若干箱子里。约定这n种物品的体积均不超过V,即对于0≤i<n,有0<vi≤V。不同的装箱方案所需要的箱子数目可能不同。装箱问题要求使装尽这n种物品的箱子数要少。【分析】若考察将n种物品的集合分划成n个或小于n个物品的所有子集,就可以找到最优解,但可能划分的总数会很大。贪婪法对适当大的n求解出合适的解,该算法依次将物品放到第一个能放进去的箱子中,虽不能保证找到最优解,但还是能找到非常好的解。不失一般性,设n件物品的体积是按从大到小排好序的,即有v0≥v1≥…≥v(n-1)。如不满足上述要求,只要先对这n件物品按其体积从大到小排序,然后按排序结果对物品重新编号即可。9.4游戏开发算法9.4.2游戏算法设计(7)分治法

基本思想:任何一个可以用计算机求解的问题,计算所需的时间都与其规模N成正比关系。如果原问题可分割成k个子问题(1<k≤n),且这些子问题都可解,并可利用这些子问题的解求出原问题的解,即可以采用分治法解决该问题。反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。

基本步骤:步骤1:分解,将原问题分解为若干个规模较小、相互独立与原问题形式相同的子问题;步骤2:解决,若子问题规模较小而容易被解决则直接解,否则用递归解各个子问题;步骤3:合并,将各个子问题的解合并为原问题的解。9.4游戏开发算法9.4.2游戏算法设计分治法的问题应用:【问题】循环赛日程问题:设有n=2^k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:(1)每个选手必须与其他n-1个选手各赛一次;(2)每个选手一天只能参赛一次;(3)循环赛在n-1天内结束。按此要求将比赛日程表设计成有n行和n-1列的一个表。在表中的第i行,第j列处填入第i个选手在第j天所遇到的选手。其中1≤i≤n,1≤j≤n-1。表9-2比赛日程表12342341434123215678658778568765567867858785676512342143341243219.4游戏开发算法9.4.2游戏算法设计【分析】按分治法的策略,将所有的选手分为两队,则n个选手的比赛日程表可以通过n/2个选手的比赛日程表来决定。递归地用这种一分为二的策略对选手进行划分,直到只剩下两个选手时,比赛日程表的制定就变得很简单,得到如表9-3所示的选手的比赛日程表。其中左上角与左下角的两小块分别为选手1至选手4和选手5至选手8前3天的比赛日程。据此,将左上角小块中的所有数字按其相对位置抄到右下角,又将左下角小块中的所有数字按其相对位置抄到右上角,这样就分别安排好选手1至选手4和选手5至选手8在后4天的比赛日程。同理,可将这个比赛日程表推广到具有任意多个选手的情况。12345678表9-3日程表第一行9.4游戏开发算法9.4.2游戏算法设计用一个for循环输出日程表的第一行for(inti=1;i<=N;i++)a[1][i]=i);然后定义一个m值,m初始化为1,m用来控制每一次填充表格时i(i表示行)和j(j表示列)的起始填充位置。用一个for循环for(ints=1;s<=k;s++)N/=2将问题分成几部分,对于k=3,n=8,将问题分成3大部分:第一部分为,根据已经填充的第一行,填写第二行,第二部分为,根据已经填充好的第一部分,填写第三四行,第三部分为,根据已经填充好的前四行,填写最后四行。用一个for循环for(intt=1;t<=N;t++)对上一步骤中提到的每一部分进行划分。对于第一部分,将其划分为四个小的单元,即对第二行进行如下划分。

同理,对第二部分(即三四行),划分为两部分,第三部分同理。最后,根据以上for循环对整体的划分和分治法的思想,进行每一个单元格的填充。填充原则是对角线填充。

表9-4日程表划分9.4游戏开发算法9.4.2游戏算法设计

关键代码如下:

for(inti=m+1;i<=2*m;i++)//i控制行

for(intj=m+1;j<=2*m;j++)//j控制列

{a[i][j+(t-1)*m*2]=a[i-m][j+(t-1)*m*2-m];/*右下角的值等于左上角的值*/a[i][j+(t-1)*m*2-m]=a[i-m][j+(t-1)*m*2];/*左下角的值等于右上角的值*/}9.4游戏开发算法9.4.2游戏算法设计

运行过程如下:步骤1:由初始化的第一行填充第二行,如图9-11所示;

步骤2:由s控制的第一部分填完。然后是s++,进行第二部分的填充,如图9-12所示;图9-11第一部分填充示意图图9-12第二部分填充示意图9.4游戏开发算法9.4.2游戏算法设计步骤3:最后是第三部分的填充。图9-13第三部分填充示意图9.4游戏开发算法9.4.2游戏算法设计(8)动态规划法

基本思想:动态规划过程,每次决策依赖于当前状态,又随即引起状态的转移,在变化的状态中产生一个决策序列。由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个二维数组中。

基本步骤:步骤1:分析最优解的性质,并刻画其结构特征;步骤2:递归的定义最优解;步骤3:以自底向上或自顶向下的记忆化方式(备忘录法)计算出最优值;步骤4:根据计算最优值时得到的信息,构造问题的最优解;9.5游戏开发设计模式

设计模式(DesignPattern)是一套被反复使用、经过分类编目的、代码设计经验的总结,使程序开发人员可以更加简单方便地复用成功的设计和体系结构。在大型的游戏项目开发中,更加需要使用设计模式来提高程序库的重复利用性。9.5.1观察者模式9.5游戏开发设计模式设计意图和作用是:将对象与对象之间创建一种依赖关系,当其中一个对象发生变化时,将这个变化通知给与其创建关系的对象中,实现自动化的通知更新。游戏中适用观察者模式的环境:(1)UI控件管理类:当GUI控件都使用观察者模式后,则任何界面的相关操作和改变都将会通知其关联对象——UI事件机。(2)动画管理器:在播放一个动画帧时,设置一个帧监听器对象(FrameLister)对帧(Frame)进行监视,以获得相关事件并进行处理。9.5.2单件模式9.5游戏开发设计模式单件模式的设计意图和作用是:保证一个类仅有一个实例,并且仅提供一个访问它的全局访问点。游戏中适用单件模式的环境:(1)所有的管理类:在大部分流行引擎中都有体现。(2)大部分的工厂基类:如果父类工厂采用唯一实例,则非常方便子类扩展。

9.5.3迭代器模式迭代器模式的设计意图和作用是:提供一个方法,对一个组合聚合对象内各个元素进行访问,同时又不暴露该对象类的内部表示。游戏中适用于迭代器模式的环境:对任何形式的资源通一管理时,都需要一个对其进行访问的工具。9.5.4访问者模式9.5游戏开发设计模式访问者模式设计意图和作用是:当对一个结构对象添加一个功能时,能够在不影响结构的前提下,定义一个新的对其元素的操作。游戏中适用于访问者模式的环境:(1)任何一个比较静态的复杂结构类中都适合采用访问者模式。(2)适合于一个装载不同对象的大容器。9.5.5外观模式9.5游戏开发设计模式外观模式的设计意图和作用是:将用户接触的表层和内部子集的实现分离开发。游戏中适用外观模式的环境:(1)实现平台无关性,跨平台跨库的函数调用;(2)同一个接口去读取不同的资源;(3)硬件自动识别处理系统。9.5.6抽象工厂模式设计意图和作用:封装一个创建一系列互相关联的对象的接口,在使用接口时不需要指定对象所在的具体类。游戏中使用抽象工厂模式的环境:基本上任何有批量同类形式子件的地方就会有工厂的存在。9.6游戏开发版本与里程碑游戏版本是指游戏开发到一定阶段所构建的可体验的内容集合。里程碑是指根据游戏版本内容定制的计划及其对应的时间,包含版本中将有哪些功能点、完成多少资源以及确定分别由哪些人牵头跟进每个功能模块等。9.6.1里程碑计划定制(1)立项产品立项也就不仅仅是要看到一个小型的版本,还需要准备充分的立项材料。(2)核心验证在产品研发的过程中,需要把核心加入到产品中的。产品核心通常会在FP版本就定义好,并在版本中验证。9.6游戏开发版本与里程碑(3)功能完善与体验丰富当一个产品的核心功能完成,接下来的时间就是不断地完善这个核心功能,并根据游戏产品的体验点补充其他内容来丰富产品,投入大量的人力和时间突击难点。9.6.2里程碑与版本问题(1)里程碑和版本不能脱节目前里程碑计划只是按照时间平均切分的计划,在里程碑结束的同时,构建一个符合这个里程碑开发工作的版本,使得整个里程碑单纯变成了工作量的计划。(2)定制优秀的版本计划要有更强的意识表面上看,构建版本和里程碑计划只是项目开发进度上的一个环节。结合里程碑计划去构建这个版本就会使团队有信心相信所有的事情都在计划中进行着。9.6游戏开发版本与里程碑9.6.2里程碑与版本问题(3)整合版本需要更强的统筹力当产品开发时间进入中后期,就需要整合版本来验证功能。(4)团队开发低效产品的完成情况掌握在几个人心里,而不是实际地体现在产品里。游戏开发团队都是为了产品而努力,如果不知道努力的目标和距离,就容易懈怠甚至产生厌倦。(5)版本计划难以定制这需要从游戏设计出发,产品的定位比较高,产品包含的内容过多,要考虑到在合适的时间内做出一个完整的且符合预期的产品。9.6游戏开发版本与里程碑9.6.2里程碑与版本问题(6)进度缓慢的原因对于游戏产品来说,功能实现是必须的,但只完成功能是不够的,还需要不断优化。这些工作积累到完成所有功能之后进行,就可能浪费不少工作量。(7)坚持构建版本的目的性要回顾产品到BETA版本时的内容,坚持制定和公布版本计划,坚持构建可以体验的版本并反复验收,有计划地尽量使用正式资源和正式的内容。9.6游戏开发版本与里程碑人工智能(AI,ArtificialIntelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。9.7游戏中的人工智能9.7.1游戏AI的基本元素(1)基本逻辑感知(Perception)指AI在所处环境或世界中,侦测周围环境或者事件变化的能力,由游戏设计者决定的并且赋予的。行动(Action)指AI自己决定去做一系列行为,游戏设计者通过一系列的规则和逻辑次序的设定来控制这些AI的行动。一个有着丰富AI角色的世界,会让玩家更容易的融入游戏。9.7游戏中的人工智能组成游戏AI的三个基本元素:基本逻辑、基本能力和基本属性。9.7.1游戏AI的基本元素

反应(Reaction)

指AI在感知到玩家的行为时引发刺激信息,同时触发相应的行为。

学习(Learning)

比较复杂的游戏AI会记录玩家的行为变化,并把这些信息放到一个专门的分析系统中逐一分析,从而得到最有利的反应。9.7游戏中的人工智能(1)基本逻辑9.7.1游戏AI的基本元素(2)基本能力

9.7游戏中的人工智能1)检测潜在威胁确认对方身份;2)确认威胁级别;3)与敌对者交战;4)特殊行为。

这些基本能力作为可调整的嵌入参数形成更多类型的AI,可以保证基本逻辑流程的一致,即在一套基本的AI逻辑中嵌入多样化的能力,从而达到AI类型的多样化。

大多数游戏中的AI能力可以分为四种:9.7.1游戏AI的基本元素(3)基本属性9.7游戏中的人工智能1)身份(阵营)2)战斗参数(生命值、攻击力、防御力等)3)交互范围(追击距离、仇恨侦测距离、攻击交互距离等)4)侵略性(攻击技能的使用频率)5)仇恨(查找主要攻击目标)可以通过调整基本属性,设计出个性不一的AI。通常游戏中AI基本属性可以分为以下五种:9.7.2游戏AI的设计目的在不同的游戏中,玩家对AI的期待不同,这些期待只有在游戏的设计目标发生变化的条件下才可能改变。 9.7游戏中的人工智能(1)增加玩家的挑战性向玩家提供一种合理的挑战是任何游戏AI的首要目标,如果游戏没有任何挑战性,这个游戏的可玩性就会大大降底。(2)模拟真实世界

电脑游戏的AI不能设计得过于简单,玩家不会指望NPC非常聪明,但是AI应该完成一些简单任务。(3)增加游戏的可玩性

游戏有更高的耐玩性,玩家会重复体验。9.7.2游戏AI的设计目的(4)帮助叙述故事游戏AI可以帮助展开游戏情节,让故事增加更多的趣味,使游戏具备更大的可玩性。 (5)创造一个逼真的世界

用游戏中的对象创造的枯燥的游戏世界对玩家来说不能算一个真实存在,但将周边的环境加入到游戏世界中,那么对玩家来讲,游戏世界就会更真实。9.7游戏中的人工智能9.7.3游戏AI设计与实施常见游戏的AI方案包括了有限状态机(FSM,FiniteStateMachine)、分层有限状态机(HFSM,HierarchicalFiniteStateMachine)、面向目标的动作规划(GOAP)以及分层任务网络(HTN)和行为树(BT)等。9.7游戏中的人工智能(1)有限状态机(FSM)

表示有限多个状态以及在这些状态之间转移(Transition)和动作(Action)的数学模型。有限状态机的模型状态首先是离散的,然后状态总数是有限的。9.7游戏中的人工智能9.7.3游戏AI设计与实施图9-14有限状态机模型重要概念:1)状态(State):表示对象的某种形态,在当前形态下可能会拥有不同的行为和属性;2)转移(Transition):表示状态变更,并且必须满足确使转移发生的条件来执行;3)动作(Action):表示在给定时刻要进行的活动;4)事件(Event):事件通常会引起状态的变迁,促使状态机从一种状态切换到另一种状态。9.7游戏中的人工智能9.7.3游戏AI设计与实施(1)有限状态机(FSM)除了游戏AI的实现可以依靠有限状态机之外,游戏逻辑以及动作切换都可以借助FSM来实现。FSM有两点特性:一是可以明确地表达NPC的行为系统;二是可以准确预测NPC下一步的行为。因此,通过有限状态机所建立的是一种确定的行为系统,没有任何不确定因素。FSM的优点是易于理解、易于编程,特别是易于纠错。9.7游戏中的人工智能9.7.3游戏AI设计与实施(1)有限状态机(FSM)图9-15有限状态机(一个游戏单位的AI)实现有限状态机主要有集中管理控制和模块化管理两种方式,如下:使用switch语句:最简单同时也是最直接的一种方式,基本思路是为状态机中的每一种状态都设置一个case分支,专门用来对该状态进行控制。

9.7游戏中的人工智能9.7.3游戏AI设计与实施(1)有限状态机(FSM)9.7游戏中的人工智能9.7.3游戏AI设计与实施(1)有限状态机(FSM)使用状态模式(StatePattern):把复杂的逻辑判断简单化是对于状态更容易维护和拓展。但状态模式如果使用不当,将导致程序结构和代码的混乱。

状态模式中的三种角色:上下文环境(Context):定义客户程序需要的接口并维护一个具体状态的实例;抽象状态(State):定义一个接口以封装使用上下文环境的一个特定状态相关的行为;具体状态(ConcreteState):实现抽象状态定义的接口。一个有限状态机的逻辑结构是没有层次的,分层后在一定程度上规范了状态机的状态转换,从而有效地减少了状态之间的转换。9.7游戏中的人工智能9.7.3游戏AI设计与实施(2)分层有限状态机(HFSM)(3)模糊状态设计(FuSM)

在FSM基础上把不确定性引入NPC的行为系统中,使NPC的行为具有更多变化。在FuSM中,即使知道了外部输入和当前状态,也无法确定目标状态,可以设计几个简单的通用的FuSM,然后通过不同的概率设定(或称阈值)产生各种各样的NPC。(4)动作游戏中的AI设计

判断条件和对应的行为结果。一款游戏作品可以分为游戏引擎和游戏资源两大部分。游戏资源包括图象、声音、动画等;游戏引擎是一个为运行某一类游戏的机器设计的能够被机器识别的代码(指令)集合,按游戏设计的要求顺序的调用这些资源。9.8游戏引擎技术介绍游戏引擎技术已成为当前计算机游戏开发的关键技术和核心平台,对游戏产业的发展起了巨大的推动作用。负责玩家与电脑之间的沟通,处理来自键盘、鼠标、摇杆和其它外设的信号。如今游戏引擎已经发展为一套由多个子系统共同构成的复杂系统,主要包含渲染引擎、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理等。9.8.1游戏引擎功能(4)渲染系统渲染引擎在引擎的所有部件当中是最复杂的。9.8.1游戏引擎功能9.8游戏引擎技术介绍

另外,游戏引擎具备强大的编辑器,使得第三方软件可以与引擎无缝对接。(1)光影系统指场景中的光源对处于其中的人和物的影响方式。(2)动画系统引擎把骨骼动画系统和模型动画系统预先植入游戏,方便动画师为角色设计丰富的动作造型。(3)物理系统使物体的运动遵循固定的规律。碰撞探测是物理系统的核心部分。9.8.2著名游戏引擎9.8游戏引擎技术介绍

图9-17孤岛危机3图9-18混沌试炼(1)CryENGINE2引擎

由德国Crytek公司研发,旗下工作室“Crytek-Kiev”优化、深度研究的游戏引擎。在游戏引擎开发上属于新生代,几乎能够支持当今最新的所有图形视觉特效,是全能的超高端引擎。9.8.2著名游戏引擎9.8游戏引擎技术介绍(2)Gamebryo引擎

属于高端级别引擎,是NetImmerse引擎的后继版本,提供一套完整的游戏框架,其强大的设计性和高度的灵活性使其获得很多游戏公司的青睐。

图9-19上古卷轴5图9-20战锤Online9.8.2著名游戏引擎9.8游戏引擎技术介绍(3)BigWorld引擎是澳大利亚BigWorldPty.Ltd所开发,由服务器软件、内容创建工具、3D客户端引擎、服务器端实时管理工具组成。为构建富有创造力的一流的新一代网络游戏的开发商降低了开发

温馨提示

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

评论

0/150

提交评论