第一部分
Part 1
简介
第1章制作游戏
第2章游戏玩法和游戏机制
第3章游戏中的数学和逻辑学
第1章
Chapter 1
制 作 游 戏
视频游戏行业(多功能控制台游戏、计算机游戏和移动游戏都可以属于此类)已经从被少量技术爱好者享受的业余爱好成长为一种吸引了全世界玩家的娱乐形式,并且产值达到数十亿美元。游戏已经步入成熟期,它们现在正对诸如图书、电影、唱片甚至电视之类的传统娱乐形式发起挑战。在这之前,从未有一种娱乐形式可以让用户如此直接地与最终产品交互,并且这种交互性可以吸引如此多的玩家参与视频游戏。
一些视频游戏相对简单,只需几分钟的时间就能玩游戏。其中一些视频游戏是单机游戏,可以一个人玩;而另外一些视频游戏是在线游戏,可以有许多玩家参与其中。还有另外一些视频游戏要复杂得多,需要花费几天或几周的时间才能完成。视频游戏的种类如此繁多,足以使每个人都找到某款可以使他们自己感到愉快的游戏,而不管他们所希望玩游戏的时间有多长。
是什么使得视频游戏如此有吸引力呢?依赖于游戏的类型,可以给玩家提供许多不同的游戏情节。一位玩家可能享受使游戏中的角色执行一系列狂野的动作(跳到圆桶上,躲避落下的石块,拔出枪,轰炸坏蛋)所需的身体灵活性;另一位玩家可能享受求解谜题的智力练习;另有一位玩家梦想着成为一名著名的棒球运动员,利用大满贯的本垒打进行清垒。还有其他的玩家可能通过变成行业的百万富翁或企业界大亨而享受登上巅峰的挑战。玩家可以利用多种不同的方式享受视频游戏。不过,在所有情况下,玩家都是通过控制器或键盘/鼠标在屏幕上移动物体以及执行各种动作,来实现与游戏的交互。因此,与传统的被动娱乐形式不同,这种交互性有助于使视频游戏风靡全世界。
11游戏玩法和游戏数据
玩家在玩游戏期间执行的动作构成了游戏玩法。每种游戏类型都有它自己的一组动作,尽管许多游戏共享公共的动作,比如,在屏幕上四处移动物体。简单的游戏要求玩家执行的动作较少,而复杂的游戏可能具有许多动作。例如,在经典的街机游戏《Pong》中,玩家只需在屏幕上向上和向下移动控制手柄,以拦截一个移动的球,并把它弹回给另一位玩家(参见图11)。在第一人称射击游戏中,主要关注的是通过游戏世界移动一个角色,并向AI(人工智能)控制的敌人(在有的死亡模式中有时是其他玩家)射击。可能有多种不同类型的运动方式,比如奔跑、行走、跳跃、倚靠、蜷伏等。还有许多种不同的武器,玩家可以在玩游戏期间收集和使用它们。
图11在《Pong》游戏中,与这里显示的图像类似,游戏玩法包括简单地上、下移动控制手柄,撞击球使其越过中间的网
随着游戏变得越来越复杂,涉及的动作也变得越来越复杂。例如,在角色扮演游戏中,玩家要执行许多活动——从探索世界到交战,到与非玩家控制的角色(NonPlayer Character,NPC)交谈,到在商店中购买和销售物品,再到求解谜题。一些模拟游戏可以让玩家想象他们在驾驭飞行器或者开着赛车,而其他游戏则允许玩家建造金融帝国。在这样复杂的游戏中,玩家要做大量的工作,并且要做出许多决策。玩家可以反复地玩这些复杂的游戏,这是由于游戏世界中发生事件的多样性而导致每个结局都与上次玩游戏时不同。
111简单的设计和复杂的设计
在所有情况下,无论是在简单的游戏中还是在复杂的游戏中,确定游戏玩法的工作原理都是设计师的职责。在简单的游戏中,设计师经常直接与程序员打交道,以决定事件在游戏中是如何发生的——从乒乓球移过屏幕的速度,到球拍在与球接触时施加了多大的力等。简单的游戏通常依靠随机性防止游戏变得非常容易预测,除了指定事件发生的概率之外,设计师很少能够控制机会因素。
在更复杂的游戏(例如,第一人称射击游戏和实时战略游戏)中,设计师通常需要提供关于游戏世界以及其中包含什么内容的相当多的信息。例如,如果游戏中有武器,设计师就不得不考虑诸如射击速率、造成的伤害、每次装填的弹药量等之类的事情。在非常复杂的游戏(例如,角色扮演游戏和战争游戏)中,信息量非常庞大,并且可能要花很长的时间来进行平衡,以确保任何一支部队都不会过于强大,并且没有哪种玩法总会取得成功。
在简单的游戏中,通常没有太多的信息(或数据)需要设计师处理,因此把所有的一切都硬编码进游戏引擎中。更改代码以改进玩法通常不是太困难。不过,在更复杂的游戏中,将会有多得多的数据,最好保持将数据与游戏引擎分隔开。这样做将允许设计师在测试期间根据需要调整值,而无需重新编译代码,因此可以在游戏中执行更改并对其进行测试。重新编译代码需要花费时间,并且会使程序员和设计师在这个过程中都无所事事。因此,对于更复杂的游戏,将把数据保存在单独的文件中,设计师无需重新编译代码即可访问和更改它们。一旦准备好交付游戏,就可以把最终的数据直接纳入游戏引擎代码中,使得阴险狡诈的玩家不能操纵它。
. 112游戏数据
本书重点关注的是设计数据密集型游戏,并且讨论设计师在生产期间必须创建和维护的不同类型的数据。对于设计师来说,游戏数据可以分为4大类:图表和表格、关卡/地图布局、脚本以及对话。
图表和表格(chart and table)是指关于游戏中的物体(例如,武器、怪物、财宝、制作、角色生成等)的值及其他信息的列表。表格特指在其中操纵图表数据以执行游戏动作(例如,战斗决议、魔法攻击、买卖物品等)的方法。
关卡/地图布局(level/map layout)是指如何在二维或三维空间中创建游戏场地,以及如何在它们上面放置物体以使玩家与之交互。
脚本(script)是指用于改变游戏世界的状态、构造对话以及触发遭遇的方法。
对话(dialogue)当然是指游戏世界里的角色所说的话,它也指在玩游戏期间出现的其他文本字符串(例如,当玩家高亮显示某个物品时出现的关于它的描述)。
创建所有这些数据可能是一项具有重大意义的任务,并且保持定期更新设计文档,使得整个团队知道他们正在负责相同的设计是设计人员义不容辞的责任。
12设计师和开发流程
依赖于公司和制作的游戏,可能只有一位设计师负责创建和维护所有的数据。与设计复杂的游戏相比,设计简单的游戏相对较快,因为考虑、测试和平衡的游戏元素要少得多。更复杂的游戏通常涉及一个设计师团队,并且有一位高级设计师监督初级设计师和关卡设计师的工作量。高级设计师负责游戏的总体设计和玩法,而初级设计师则帮助处理开发期间的多项任务。关卡设计师知道如何使用像Autodesk的3ds Max或Maya这样的3D建模程序创建游戏世界的环境,以及使用脚本编程语言触发环境中的事件。
设计视频游戏当然不是一项孤军奋战的任务。设计师将在整个流程中与其他团队成员紧密协作,包括程序员、艺术家、音频工程师和管理层。实际上,应该鼓励所有的团队成员提出一些使设计变得更好的想法。良好的设计师乐意听取他人的建议,并且接受那些可以改进游戏玩法的建议。不过,有时确实不得不终止对设计进行更改,以使得可以按时完成游戏。但是可以把任何良好的思想记录下来,然后把它们合并到插件或后续版本中。
121游戏开发周期:预制作阶段
每家公司都有其提出游戏设计并实现的方法,但是在游戏制作过程中一般有3个阶段。第一个阶段是预制作(preproduction),其中将评估一些游戏思想,直到有一个脱颖而出。游戏思想可以来自于公司内的许多地方,这取决于创意过程是如何处理的,并且如果设计涉及一个许可证,很可能想要涉及市场营销,以确保设计保持在许可人要求的限定范围内。在许多情况下,原创者将创作一页或两页称为意向书(pitch paper)的书面材料,并把它呈递给设计人员和管理层。
一旦接受了某个构思,设计师可能通过编写游戏提案(game proposal)来开发它,游戏提案是一份更长的文档,其中描述了游戏世界和主要的游戏玩法元素。它通常包括市场营销一节的内容,提出竞争性的产品,以及解释为什么新游戏将在市场竞争中成功胜出。设计师在编写详细游戏提案的过程中会接收到来自艺术家和程序员的反馈,以确保可以像所展示的那样完成最终的产品。
开发者或发行者在决定每一个人都认为会取得成功的一种游戏提案之前,可能会评估许多种游戏提案。一旦游戏思想批准通过,设计师(也许会借助其他设计师的帮助)将详细编写游戏设计文档(game design document),详细描述游戏的工作原理以及游戏世界看起来是什么样子的。此时,一名高级程序员和几位素描艺术家可能帮助完成创建最终文档的过程。到设计文档完成时,团队对于他们计划构建什么应该有一个非常好的主意。编制文档的过程对于包括许多数据的复杂游戏特别有用,并且它的创建将允许设计师和其他团队彻底地考虑在把思想转变成最终的商业产品的过程中将会涉及什么。
一些公司没有经历文档编制过程,而代之以使用一种迭代式设计流程。例如,计划创建一款第一人称射击(FirstPerson Shooter,FPS)游戏(比如《毁灭战士》(Doom))的开发者可能决定创建游戏的原型,而不是把时间花在用文档记录他的思想上。FPS游戏的基本游戏玩法定义得非常好,并且主要的挑战是提出新的有趣的武器、敌人和游戏世界。公司可能构建许多原型,以便在确定一种要呈递给管理层或发行者的理念之前试验不同的虚拟题材。可以让专题小组(focus group)试验这些原型,他们的反馈将帮助设计师和管理层从玩游戏和商业的角度理解哪些原型是最吸引人的。
一旦管理层批准了游戏设计,无论这是发生在文档编制过程的末尾阶段还是在商定了一种原型之后,都可以开始组建团队,以及添加更多的程序员和艺术家。不过,在一头扎进游戏制作中之前,团队要花一些时间通过技术审查分析设计目标。
122技术审查
预制作过程中的另一个重要部分是让其他团队查看总体设计,了解在开发期间期望他们做什么工作。编程团队通常会创建一份技术设计文档(technical design document),其中他们将分析游戏引擎的需求,并且查明使代码模块彼此交互的架构。他们还会决定他们将不得不为处理项目的多个不同的团队创建什么工具。同样,艺术团队可能创建他们自己的艺术设计文档(art design document,有时也称为艺术圣经),其中他们不仅会确定游戏世界里的物体和角色看起来是什么样子的,而且会就创建艺术资产的技术需求达成一致意见。尽管音频在开发后期才会派上用场,但是音频团队领导应该查看设计文档,并开始创建他们自己的音频设计文档(audio design document)——用于游戏的音效、解说以及可能的音乐主题的列表。最后,测试组长(也称为质检员(Quality Assurance))也应该查看设计文档,以确定将需要测试什么,然后开始编写测试套件(test suite),用于在把组件组装起来时检查产品。
在所有的团队都参与了项目之后,团队领导将与制作者和管理者碰头,明确最终的制作时间表和预算。他们将确定何时应该聘请新员工以及何时需要额外的硬件和软件。最终的时间表将分解成一系列里程碑。团队还应该确保从市场营销方面权衡制作时间表,以便他们可以指出在什么地方需要产品的可行演示和截屏图。
预制作中的最后一步通常是创建游戏的可行交互式原型。它不仅可以给管理层演示将如何玩游戏以及游戏世界看起来是什么样子的,而且可以让设计团队在开始完整的制作之前测试一些机制。在非常复杂的游戏(比如,角色扮演游戏)中,在确定赋予角色和物体的值将如何交互时,具有简洁系统的原型可以提供巨大的帮助。然后,如果设计师检测到原始设计的问题,就可以调整游戏机制。在制作周期中尽可能早地执行更改要远远好于在以后创建了许多资产时再采取这个动作,因为更改通常需要广泛地修改代码、艺术和音频。
123游戏开发周期:制作阶段
一旦整个制作团队知道他们想要构建什么以及他们如何计划创建它,他们就可以开始处理将在游戏中使用的真实资产。艺术家开始构建将用于角色、物体和环境的2D精灵或3D模型(见图12)。程序员开始为游戏引擎编写代码。设计师继续改进游戏中的数据,并与关卡构建者协作以确定将如何布置环境以及它们将包含什么。当把玩法元素都集中起来时,将把它们纳入游戏中进行测试,并根据需要进行修改。基于收到的反馈,设计师可能决定对设计进行重大的更改,并且会更新游戏设计文档,以反映所做的任何更改。
图12一旦批准了生物的草图,就在3D图形程序中创建模型。例如,图12中所示的这条鳄鱼的模型就是利用3D艺术工具Vidar Rapp创建的。然后将装扮生物,制作动画并把它添加到游戏中
最终,游戏到达了一种可以从开始玩到结尾的状态,即使这是以一种非常粗糙的形式完成的。这种状态就称为Alpha测试版(alpha build)。到此时,设计应该稳定下来,只需对基本设计执行非常少的更改。团队继续为最终版本添加艺术和代码资产,还会创建最终的音频资产并纳入产品中。与此同时,测试员将寻找游戏中的任何问题,以便可以修正它们。
当把所有的资产都添加到游戏中之后,团队接下来将进行润饰和调试,并且游戏到达了Beta测试版(beta build)。此时,应该不再有设计更改,并且只允许进行错误修正。然后将把最终的产品展示给发行者,以便进行他们可能需要的任何最终的更改。最后一步是发送出游戏的最终版本(称为黄金版(gold version))以进行生产制造。
制作是游戏开发中消耗时间最长的部分。它可能要花几年时间完成代码以及制作将出现在最终产品中的所有资产。许多开发者和发行者会在这个阶段添加额外的里程碑,以便他们可以确保游戏开发不会偏离目标。独立于发行者的第三方开发者将为满足他们的里程碑而获得报酬,因此通常会存在某个时间段,其中每一个人都不得不投入许多额外的时间和精力为下一个版本做好准备——这个时间段称为关键时刻(crunch time)。
124游戏开发周期:后期制作阶段
后期制作阶段与制作阶段的后期部分重叠,并且涉及最终游戏的市场营销和发布。设计师可能被分派一项任务,编写手册的第一份草稿,解释游戏中所有的控件和特性。手册的最终版本通常是由市场部聘请的专业作家编写的。市场部逐步发展产品的市场营销活动,决定在什么地方做广告以及将需要哪些额外的材料——例如,演示版本或战略指南。与之不同的是,开发团队不会过多地参与创建包含游戏的CD/DVD光盘、软件包装或者将最终产品分发给零售商。
团队可能在游戏发行后参与创建促销材料——例如,Web聊天以及在展销会和大会上会见玩家。如果重大的错误神不知鬼不觉地溜进了最终的发行版本中,还可能要求团队创建可下载的补丁。甚至在发布最终版本以进行生产制造之前,将把团队中的大部分人重新分配给其他的项目,其中一些人可能已经参与到新游戏的预制作阶段中。
13设计师在游戏开发中的角色
游戏的高级设计师将帮助定义团队构建什么。然后他将变成“火焰的守护者”,以保证像构思的那样制造最终的产品,并且玩起来很有趣。许多人错误地认为设计师的主要职责是提出游戏的故事情节,但这只是他们工作的一部分。许多游戏题材(冒险游戏、第一人称和第三人称射击游戏,尤其是角色扮演游戏)确实需要一个中心故事把各个部分链接在一起。开发具有有趣的角色、场景、敌人和物品的大型故事是有挑战性的,并且要花相当多的时间设计出所有的细节。
不过,许多游戏题材并没有中心故事。在大多数体育游戏、模拟游戏、益智游戏或街机游戏中都没有故事。如果在这些游戏类型中确实出现了故事元素,它们也只是与中心玩法体验稍有关联。然而,设计师要做相当多的工作才能查明怎样使所有的玩法元素形成一个有凝聚力的整体。对于非故事类的游戏来说,开发游戏玩法元素所花的时间可能与为大型角色扮演游戏开发中心故事所花的时间一样漫长。
131思考和确定理念
设计师最重要并且最令人愉悦的任务之一是提出游戏思想,然后扩展它以确定玩家的哪些所作所为是有趣的。虽然一些设计师更喜欢独自提出他们的思想,但是许多人更喜欢与他人合作。坐下来与每一个人自由地闲谈,大声探讨各种思想,同时设计师掌控讨论的方向,并在一张白板上草草记下各种思想,这将使人感到非常愉快。然后,设计师将记下关于各种建议的笔记,并把它们分发给参与者进行评论。各种思想的相互影响可以产生一些有趣的、具有创意的建议。
然后设计师必须接纳所有的思想,并为游戏提出一个具体的中心理念。许多公司使用了一个流程,其中任何人都可以提出原始的思想,并把它写在一篇短文档(即意向书)中,以呈递给管理层和创意人员。意向书必须阐明游戏的精髓,并且解释它为什么是新的以及为什么玩起来很有趣。它应该给阅读者留下不可磨灭的印象,因此应该尽可能充满创意地编写它。它应该定义游戏题材,描述虚拟的场景(如果必要的话),然后谈论游戏玩法的一两个最有趣的方面。它打算作为一种推销工具,使管理层(尤其是市场和销售方面的管理人员)有兴趣制作游戏。理想情况下,应该在第一个段落中用包含20个或更少单词的句子概括出游戏的中心理念。这个句子是游戏的高级理念(high concept),并且是市场部推销游戏理念的有用工具。
如果管理层决定某种思想很好,那么他们就会让设计师在游戏提案中更详细地充实它。良好的游戏思想可以毫不费力地得到,并且其中许多思想被提交给管理层,但是最终被搁置在一边。对于呈递的每10种思想,只有一两种被认为值得在它上面做更多的工作。
132游戏提案
游戏提案详细描述了基本理念,并且比较详细地介绍了主要的游戏玩法特性。它仍然是一篇相对较短的文档,不应该过于详细地介绍每种特性。其思想是通过说明将如何玩游戏以及游戏世界将会是什么样子的来吸引管理层,并且它应该显示理念值得进一步开发。设计师通常与素描艺术家合作,提出关于角色、有趣的世界位置和物体的思想,但是在这个阶段不太适合做出实际的深入设计。同样,提案也可以用作推销理念的一种市场营销工具,并且最重要的特性之一是市场营销分析,其中设计师与市场部一道演示的新游戏将填补市场中的现有空缺,或者可以在与类似产品的竞争中成功胜出。总之,提案可能包括6~10页。如果它太长,管理层可能不会研究它;如果它太短,则将不能足够详细地包含所有有趣的元素。
设计师在把游戏提案展示给管理层之前,要花大约一两个月的时间来充实它。除了理念艺术家提供的帮助之外,设计师通常会独自负责文档。有时,一系列故事板就是有用的工具,允许管理层和市场营销人员设想游戏动作或游戏世界的场景(参见图13)。强烈建议设计师询问公司的技术主管关于理念的可行性的建议。
同样,如果管理层认为思想值得追求,他们将要求设计师把理念扩展为完整的游戏设计文档。不过,对于每5个或6个游戏提案,将只有一个可能获得进一步开发的绿灯。
路线名称Tiack 1Earth Swamp
故事板编号:Swamp10帧编号:
特殊效果:
电能场从火星金字塔的顶部爆发。
声音效果:
电气爆裂声(金字塔顶部)。
编程笔记:
右边的小金字塔提供了通往坡道的捷径。
主路线向左转向林荫树。
运动模型必须能够处理坡道。
艺术笔记:
火星广场和火星金字塔。
灰色的金字塔岩石结构。
树木包围广场。
需要动画式的电能/闪电效果的纹理。
图13在预制作期间,艺术人员有时会创建故事板,定义动作序列的工作方式或者设想关卡的布局。这个故事板是由艺术家Ed Williamson创建的,他曾与本书的作者在一款赛车游戏上合作过。参见第11章中的图114,了解提议的赛道的布局
133游戏设计文档
设计流程的最后一步是游戏设计文档。它可能是一个非常大的文档,因为设计师尝试极其详细地解释游戏玩法元素如何交互以及游戏世界和角色看起来是什么样子的。起初,该文档可能给人的感觉是主要基于推测,因为直到创建了原型之后,设计师才知道游戏世界里事物的实际行为方式。因此,设计文档是“活的”事物,将会随着时间的推移而不断发展和演进。
每家公司都有其构造文档的方法。下面给出了作者多年来反复使用的结构,其思想是把一篇文档分成几大块内容,使得团队中的其余人不必同时吸收整篇文档。他们可以主要关注他们感兴趣的领域,然后可以根据自己的意愿阅读游戏的其他部分。
序言。专门为管理层编写的。它首先将解释游戏的高级理念(通常是从游戏提案中直接提取的),并且给出游戏中的玩法示例,使得读者可以设想所发生的事情。它还包括关于游戏题材、虚拟世界(如果必要)、目标平台和受众的基本信息,并且会非常粗略地估计预算和时间表。本节应该比较短,大约包含4~6页。
游戏机制。专门针对编程团队。该部分内容将详细讨论游戏玩法的每个元素,并且根据需要配有合适的图表和表格。除了解释所有的一切(运动、战斗、资源管理、魔法等)如何工作之外,它还包括设计师对每个屏幕的用户界面的建议,并且描述了所有的控制功能。到本节末尾,程序员应该非常了解游戏引擎需要什么,以及为了使设计像所想的那样工作他们首先需要测试什么。
游戏图形。专门针对艺术团队。设计师尝试包括艺术家将必须创作的所有材料——角色、环境和物品。应该具有关于每个角色、角色可以执行的动作(参考游戏机制的内容以了解更多的详细信息)以及所需的任何特殊的视觉效果的物理描述。环境和物品也要详细描述。注意,关于游戏世界里物体的初始思想可以在开发期间改变,但是为艺术家提供一个起始位置很重要,以后随着时间的推移,当执行更改时可以更新文档,并且完成最终的艺术资产。到本节末尾,艺术团队应该非常清楚他们将必须创建什么。
附录。该部分可以包括其他尚未描述的任何内容。它包括游戏的音频需求、所有的图表、表格、用户界面屏幕示意图以及设计师可能提出的其他任何内容。当游戏进入开发阶段时,随着其他元素(完成的关卡地图、对话、流程图、故事板等)的添加,该部分可能变成内容最多的一部分。
游戏设计文档在预制作和开发期间会经历两个阶段。第一个阶段是游戏设计文档的理念构想,其中将指定游戏玩法的元素和艺术要求,如上所述。设计师可能不得不多次修改理念文档,直到管理层对所有的细节都得到了充分解释而感到满意为止。第二个阶段是制作版本(称为“圣经”,因为它将充当涉足这个项目的每一个人的参考工具),它用于在整个制作阶段中跟踪对原始设计的更改。这个版本包括对原始设计所做更改的频繁更新以及在制作阶段创建的一些材料——例如,最终的关卡地图、对话、利用脚本语言创建的脚本、错误报告更新,甚至包括游戏中的所有资产的目录清单。到游戏完成时,游戏设计文档的制作版本可能长达数百页。对于承担创建插件模块或续集任务的团队(或者外部开发人员),以后可以证明它将是极其宝贵的资源。
134原型化
对于复杂的游戏,设计师在决定使用那些游戏玩法元素之前通常需要先试验它们。一种试验方式是创建一些简单的原型,包括纸质原型和电子原型。原型是游戏系统的抽象,可以给设计师提供关于系统工作状况的反馈。例如,角色扮演游戏的设计师可能对不同寻常的战斗系统有想法,并且创建一个可用于测试系统的简单的纸质原型,以及在涉及其他任何团队之前修改它的工作方式。纸质原型可用于试验系统的战斗决议、资源管理、技术树演化和谜题解答。它们对于充实关卡的结构以及确定把事物放在游戏场地中的什么位置也非常有用。设计师不需要牵涉到处理其他项目的其他员工,而只会让他们参与测试,并获取关于系统工作状况的反馈。
与纸质原型可能同样有用的是,任何最终的设计决策都不太可能在游戏引擎启动并运行之前做出。一旦资产变得可用并且引擎像预期的那样工作,那么在纸上看起来很好的设计可能发生根本性的改变。如果可能,设计师应该要求将电子形式的交互式原型作为技术审核的一部分。这种原型可能仍然非常简单,使用现有的游戏引擎和艺术(参见图14)。一旦游戏出现在屏幕上,甚至是以最初级的形式,它的外观和感觉也可能与设计师脑海中所想的差别很大。物体的比例可能需要改变,从而强制设计师重新权衡用于解析游戏动作的值。如果将会出现游戏的多玩家版本,具有用于早期测试的电子版本可以证明是飞来鸿运。通过与程序员和艺术家合作,设计师可以具有一种非常有用的工具,可以以最低的成本测试游戏的多个版本。
图14这是MEDS Games的第一人称射击游戏《Zombie Swarm》的交互式原型。这个原型可以让团队检查游戏场地上物体的比例以及测试简单的游戏玩法
使用原型的全部思想是:在其他团队开始构建游戏的最终资产之前明确事物的工作方式。如果让艺术家在艺术资产中投入大量的时间,而只是为了查明它们出现在游戏中的效果不佳,那么将没有比这更糟糕的事情了。同样,程序员憎恨重写代码,因为设计师在不断地改变他们的主意。简单的原型可以帮助设计师确定和权衡赋予游戏物体的值,并且保证游戏机制像文档中所描述的那样工作。
135资产创建
一旦整个团队准备好制作游戏,设计团队要么加入进来创建资产,要么监督其他团队成员的工作。依赖于要开发的游戏的类型,用于制作资产的工具可能非常简单,足以让设计师使用它们,或者它们可能如此复杂,以致只有技术高超的团队成员才可以自信、轻松地使用它们。有时,公司将构建像地图编辑器和脚本语言这样的工具供设计师使用。在这种情况下,在测试员递送他们的建议和错误报告时,设计师可以直接构建资产以及测试和权衡它们。在其他时间,公司不太喜欢花时间为设计师构建工具,而是选择依靠商业产品。例如,大多数设计师不擅长使用像Autodesk的3ds Max或Maya这样复杂的3D建模应用程序,因此他们将难以利用这些应用程序构建环境。作为替代,将创建环境的工作留给艺术家去做,他们与设计师合作来确定关卡的布局。关卡的纸质原型可以帮助艺术家形象地表示设计师头脑中所想的事情,从而使关卡创建要快得多。
设计师还与编程团队和艺术团队合作,以确保多种游戏系统像计划的那样工作,以及角色像构想的那样移动和行动。设计师根据需要更改图表中的数据,修改赋予物体的值和属性,直到平衡和完成了游戏系统为止。与此同时,他们将在图形用户界面上与艺术家和程序员合作,使得玩家看一眼就能理解每个屏幕上展示的所有信息,并且他们还有助于充实控制模式,直到玩家觉得它很直观并且容易理解为止。
136测试和调试
设计师最重要的工作之一是持续不断地测试游戏,以确保值经过了权衡,并且逻辑或所讲的故事中没有漏洞。在关卡完成时,将把它们提供给测试员,以检查游戏玩法的值和游戏元素中的问题。设计团队必须坚持不懈地调整游戏物体的值,直到新手和经验丰富的玩家都可以享受游戏体验为止。当开发工作逐步放松下来时,设计师还必须当心在制作的后期阶段所做的任何更改不会使前面完成的资产失衡。
从Alpha阶段及以后开始用一种新的眼光查看产品总是一个好主意。完成的关卡倾向于更难以测试,因为过于熟悉它们的测试员会抱怨说它们的难度不够。让一组新玩家查看游戏以便评估整个产品中的动作协调情况是很重要的。
随着游戏到达Beta阶段,可能调拨一些设计师开始从事下一个项目。最后一轮调试专门用于修正代码和最终艺术的问题,此时通常不再需要设计师(除非有数据库方面的问题或者需要衔接松散的故事线索)。项目的结束通常意味着设计师可以享受一个心安理得的假期,以使他们能够重新充电,充满创意地着手处理下一个项目。然后,他们将再次开始这个流程——提出思想、把它们呈递给管理层,并用文档记录游戏玩法。
14小结
本章概述了设计师在制作周期要做什么工作以使游戏从原始的理念变成最终发行的产品。提出一个中心故事只是设计流程的一部分,真正应该关注的是创建有趣的游戏玩法元素。设计师使用纸质原型和简单的交互式原型在非常复杂的游戏上测试他们的假设极其重要。使用纸质原型对于开发出现在初始游戏设计文档中的值和统计数据是一个巨大的帮助,而交互式原型可以让团队查看游戏在屏幕上看起来是什么样子的。一旦开始制作游戏,设计师将与艺术家和程序员合作构建游戏场地,并且利用要访问的有趣的地方填充游戏世界,激发遭遇,以及构建要获取或操纵的贵重物品。在整个开发流程中,设计团队将调整值和属性以及对游戏玩法进行更改,并且应该定期把这些更改包含在游戏设计文档中。随着团队变得越来越大并且有新成员加入,具有关于游戏的信息源以及尽可能使之保持最新将是有帮助的。
本书余下的部分更详细地探讨了设计复杂的、大量数据的游戏的实际流程。下一章将讨论游戏玩法与游戏机制之间的区别。虽然能够讲一个动听的故事无疑很重要,但是理解构成游戏玩法的基本元素对于成为成功的设计师起着主导作用。
15练习
1给出你最近玩过并且很喜欢的20个游戏的列表,并且确定应该把它们归类为简单的游戏还是复杂的游戏,确保列表上至少有5个复杂的游戏。
2在练习1中给出的复杂的游戏中,尝试确定哪些信息应该放入数据库中,哪些信息将由编程团队进行硬编码。从列表中选择至少5个游戏。
3为你打算完全设计的一款复杂的游戏开发一种思想,该游戏应该是一款战争游戏、角色扮演游戏、实时战略游戏或其他复杂的游戏。尝试用一个包含20个或更少单词的句子总结游戏的理念和游戏玩法,即游戏的高级理念。
4一旦具有了高级理念,就创建一份两页的意向书,并且使用高级理念作为第一个段落的第一个句子。意向书应该定义游戏中的大多数令人愉悦的游戏玩法元素。定义玩家可以做什么,以使游戏变得有趣并且令人兴奋。不要简单地编写游戏的故事。
5对游戏理念进行市场营销分析。检查目前束之高阁的其他游戏,或者调查那些与你的游戏属于同一题材的游戏。
a在Internet上做一些研究工作,查明这些类型的游戏可以产生多大的收益。
b你所选的游戏题材有多流行?是什么使之如此流行?
c用于展示它的最佳游戏平台是什么?
6把意向书扩展成一份至少8页的游戏提案。
a给出游戏中的情节或历史(如果具有它们的话)的简短摘要,或者给出为什么这个主题令人兴奋的解释。
b然后给出主要的游戏玩法元素的总结,不要描述过多的细节。
c最后,包括你的市场营销分析。
7使用从本章中学到的指导原则,基于你的游戏理念创建游戏设计文档的大纲。你将需要以下几部分内容:引言、游戏机制、艺术需求和附录。现在不要关心填写详细的信息,尽管你可能想注明你计划在每一部分中讨论什么内容。
8考虑你将需要什么,以便为你的游戏创建一个简单的纸质原型。
a制作一份你将需要的材料列表,例如,六边形地图、计数器、索引卡、游戏币等。
b创建一份你计划怎样制作原型的大纲。
在你可以开始构建原型之前,注意你可能需要做一些研究工作的领域。
第2章
Chapter 2
游戏玩法和游戏机制
上一章中频繁提到“游戏玩法”和“游戏机制”,但是没有定义这些术语的含义。本章将重点介绍构成游戏玩法的元素,以及设计师在游戏文档中需要怎样详细地定义这些元素。
通常,初级设计师在关于故事发展(而不是事物在游戏世界里实际上将如何工作)的设计文档中花费更多的时间。游戏玩法的元素结合在一起的方式是通过假定(而不是讨论)得到的。因此,初级设计师可能简单地提到有一个战斗系统,而不会准确地解释它将如何工作。这种方法把实际设计的重担留给了编程人员,并且最终的产品可能完全不同于设计师脑海里所想的产品。
另外,经验丰富的设计师可能专注于事物工作方式的一些细枝末节,这样最终会束缚编程团队,他们可能对事物在游戏中应该如何工作有一些非常好的思想。初始的游戏设计文档过于详细,阅读起来可能让人觉得厌烦,并且其中大量内容很可能会在制作期间发生变化。随着团队继续着手处理项目,可以并且应该修改设计文档,以便包容对实际的游戏玩法的更改。
21游戏玩法和“趣味因素”
在开始制作游戏时,设计师应该问问自己:在玩游戏期间,玩家将做什么“有趣”的事情?这是最重要的问题。显然,顾客之所以购买游戏,是因为他们觉得游戏会使人紧张又兴奋。玩家执行的一些动作是有趣的,并且这些是玩家希望频繁执行的动作。其他动作没有这么有趣,但是必须在执行有趣的动作之前执行它们。游戏中的一些“有趣”的动作包括:
探索未知的区域。
判定战斗形势。
寻宝。
建设。
破坏。
与游戏世界里的角色交互。
经历一个故事。
求解谜题。
操纵资源。
驾驶飞机。
驾驶快速移动的汽车。
参加体育运动。
游戏中,通常需要执行其他一些不那么有趣的动作,以为有趣的动作做好准备。当玩家期待这些不那么有趣的动作将导致以后更有趣、更令人愉悦的动作时,他们将乐意执行这些动作。其中一些不那么有趣的动作包括:
存货清单管理。
购买和销售游戏物体。
簿记。
追溯某个人的足迹,了解他以前探索过的区域。
利用行业和工资谈判管理运动队。
重新加载保存的游戏。
彻查手册,寻找隐晦的控制输入。
当然,设计师希望把有趣动作的时间最大化以及把玩家要做的乏味工作减至最少。不可能自始至终使所有的一切都是有趣的。许多复杂的游戏具有陡峭的学习曲线,其中玩家必须学习游戏中的所有交互以及每种交互的控制模式。在这些情况下,在一份教程系统中同时教会玩家几个课程是最佳的方法,它可以扩展到几个小时的玩游戏时间。
22给游戏玩法分配百分比
在思索设计理念时,设计师应该考虑玩家将把多少时间专门用于不同的玩法元素。一种方法是给期望玩家在游戏的每个部分所花的时间分配百分比。例如,典型的角色扮演游戏具有下面这些玩法元素:
战斗。
探险。
与非玩家角色(NPC)交互。
讲故事。
求解谜题。
存货清单管理。
购物/销售游戏物体。
初看上去,设计师可能决定战斗是游戏中最重要的元素,并给它分配玩游戏时间中最高的百分比。可能难以给所有的玩游戏动作都分配值,但是角色扮演游戏(RPC)的细目分类可能如下所示:
探险:60%。
战斗:15%。
与非玩家角色(NPC)交互:10%。
求解谜题:5%。
讲故事:5%。
存货清单管理:3%。
购物/销售游戏物体:2%。
可能令人感到奇怪的是,战斗所占的百分比并不是最高,但是如果你研究一下RPG中的玩法元素,很快就会发现你的大部分时间都花在穿越大块的区域或者探索城市上。如果你想把专用于战斗的百分比提高到25%,那么将不得不减少探险的时间、删除谜题或者限制讲故事的时间。其结果可能是“地牢爬行”(也称为“砍砍杀杀”),其中有多得多的敌人参与战斗,并且地图通常要小得多。的确,设计师可能发现过多的战斗将会很糟糕,因为它将变成重复的并且可以预测。
由于探险在RPG(以及其他基于故事的游戏)中如此重要,那么重要的设计包括:创建较大的游戏世界使得怪物遭遇、财宝、NPC遭遇和城市中心可以点缀在游戏世界里的每个区域中。通常可以访问一些不同的陆地,它们具有不同的环境,因此可能邂逅不同种类的生物和人类。当然,具有非常大的地图也可能会导致一些问题,因为玩家可能不得不访问每个区域许多次。经过长途跋涉再次访问已经探索过的地方将使人感觉无趣,因此可以为长途旅行添加一种机制,避免游戏拖拖拉拉、磨磨蹭蹭。
一旦设计师对分配给游戏玩法元素的百分比感到满意,他就可以构筑游戏设计文档,最先并且最详细地描述最重要的元素。制作团队然后将能够分辨他们首先应该关注哪些元素。
23游戏题材的玩法元素
复杂的游戏是由许多不同的游戏玩法元素组成的,可能要花一些时间在文档中描述所有这些元素。在后面各章中将更详细地分析每个元素的机制,但是现在要查看表21,了解按游戏题材列出的最重要的玩法元素。例如,在CCP的《星战前夜》(Eve Online)角色扮演游戏(参见图21)中,玩家不仅会作为一个角色探索行星,而且可以变成一艘宇宙飞船以探索银河系本身,因此运动将成为它的主要游戏元素之一。
表21按游戏题材列出的玩法元素
游戏分类玩法元素
角色扮演游戏
运动
战斗
角色生成
经验级别
魔法/技术
角色交互
存货清单管理
战争游戏
运动
战斗
战略和战术
军需品
领导才能
成果(援军)
实时战略游戏
运动
战斗
资源管理
成果(援军)
技术
模拟游戏
运动
战斗
资源管理
成果
进攻与防守
战略和战术
管理
射击游戏
运动
战斗
谜题
资源管理
图21CCP Games的《星战前夜》(Eve Online)游戏(一款可以在线找到的大规模多玩家在线角色扮演游戏)中的玩法元素之一是变成一艘宇宙飞船(在这里是一只猛禽)并且可以探索宇宙
可以看到,一些玩法元素可以在多种题材中找到。例如,在大多数游戏中都可以找到运动,而无论是在游戏板周围移动标记还是行军作战。不过,游戏元素的重要性将因游戏类型而异。例如,运动在战争游戏中可能非常复杂,但是在模拟游戏中却极其抽象。
24游戏玩法不包括什么
对于设计师来说,理解什么不是游戏玩法的关键要素很重要。虽然使游戏的图形具有独特的外观对于产品能否获得商业上的成功很重要,但是图形并不是游戏玩法。长时间以来,使游戏中的3D图形看上去几乎逼真在开发者和发行者当中是一个不可抗拒的愿望,尤其是在当下中央处理器和视频卡不断升级变得更强大时。但是对于图形可能有多逼真是有限制的,因为自然界是如此丰富,几乎不可能在游戏中完全真实地反映出来。3D角色的眨眼速率和变化的表情、随风飘动的小物体的运动以及反射光的细微阴影,要想在视频游戏中对它们逼真地建模,都要付出非常高的代价。的确,在应用于视频游戏图形的机器人学领域,也存在一种称为“恐怖谷”(uncanny valley)的假说。随着用于视频游戏的图形变得更逼真,玩家对角色的理解和认同感也将与日俱增,但是在某个时刻玩家会对角色的机械外观感到厌恶。尝试纳入正在说话的人脸的抽搐和肌肉运动几乎是不可能的,因为游戏引擎仍然必须涉及物理学、AI以及其他重要的功能。不管游戏的图形看上去有多好,它们都不是构成游戏玩法的要素,也不是吸引玩家多次返回到游戏中的决定性因素。
讲故事通常不是游戏玩法。如果玩家发起与游戏中的NPC的谈话,那么只要在NPC与玩家之间具有某种实际的交互,就会涉及游戏玩法。不管故事叙述多么有说服力,提供故事的背景但是不需要玩家与之交互的长长的电影场景都不是游戏玩法。曾出现过一些对电影游戏的不成功的尝试,其中玩家除了触发电影的下一个部分之外,几乎不做其他任何事情。观赏影片是被动的,而游戏是主动的,也是交互式的。当玩家很可能忘记一些情节元素并且不想重新触发长长的电影序列以填补空隙时,让设计师为游戏(比如用于Wii的《战争与和平》(War and Peace))创建大规模的、高度复杂的情节主线几乎没有什么好处。
同样,游戏中的音频(如音乐、声音效果和解说)也不是游戏玩法,尽管音频肯定能够增强游戏世界的氛围并且提供美妙的体验。如果游戏是以某种方式制作音频的,例如谱曲,那么将涉及游戏玩法。音频可以是实现某个目标的奖励,但这随后将强迫玩家成为被动的,而不是交互式的。
上面提到的元素对于设计良好的游戏至关重要,但是它们并不是玩家所体验的有趣的元素。设计师不仅需要在游戏设计文档中包含图形、音频和故事,而且还需要详细介绍玩家执行的动作——游戏玩法。
25游戏玩法的机制
简单地描述游戏玩法对于帮助编程团队理解他们必须做什么一般起不了多大的作用。如果设计师在设计文档中只是简单地说“玩家使用不同的交通工具(小汽车、摩托车、卡车、坦克等)躲避追捕”,而没有做任何解释,那么编程团队最终可能构建一款赛车游戏,而不是设计师所想的更简单的《侠盗猎车手》(Grand Theft Auto)的驾驶方案。它取决于设计师如何详细解释驾驶过程,以及建议的屏幕示意图和控制输入。
在上述示例中,设计师按如下方式描述驾驶可能更好:
玩家驾驶三类交通工具:轻型(摩托车)、中型(小汽车)和重型(卡车和坦克)。轻型交通工具非常快并且可以迅速达到最高速度,可以进入其他交通工具不能进入的狭小空间,可以承载一位驾驶员和一位乘客,但是比较容易翻倒,并且在战斗期间不能提供很多的保护。中型交通工具加速比较慢,但是可以达到相当高的速度,必须行进在道路上和小巷里,可以承载一位驾驶员和3位乘客,如果被击中,能提供恰当的保护。重型交通工具加速很慢,并且不能与轻型和中型交通工具的速度相匹敌,必须行进在道路上、小巷里和开放的空间中,可以承载一位驾驶员和最多6位乘客,并且在发生意外事故时,能把造成的伤害降到最低限度,甚至不会造成伤害。
注意:在这段描述中,将交通工具分类组织在一起(轻型、中型和重型),并且游戏玩法的描述使用的是相对值(见表22)。直到具有一种交互式原型可用于测试不同的交通工具类型之后,才能确定最终值。注意:可以利用图表更清楚地表达文本段落中的信息,这与减少冗长的废话具有相同的意义。不过,一些用于指出重要特性的描述是有意义的,因为无穷无尽的图表可能变得像无穷无尽的文本一样没有意义。
表22交通工具图表
交通工具类型
轻型中型重型
驾驶员111
乘客136
加速快中等慢
最高速度200公里/小时120公里/小时80公里/小时
意外事故伤害
表面移动
狭窄空间是否否
小巷是是否
道路是是是
开放空间否否是
注:这是初始的“交通工具图表”的大致样子,包含乘客人数、速度、运动限制以及意外事故所导致的伤害值。
在文档中,设计师还将包括玩家在驾驶不同交通工具时所看到的示意图,以及用于移动、转向和停止交通工具的控制输入。
26模拟现实
一些游戏(尤其是模拟游戏)尝试模拟现实,而不是虚幻的世界。一方面,设计这种模拟效果可能更容易,因为不必创建虚幻的世界,并且填充令人惊异的生物以及非同寻常的技术或魔法。另一方面,要尝试创建与现实世界非常接近的模拟,同时又不会由于过多的细节而使玩家感到不知所措,这提出了它自己的挑战。例如,飞机上真实的驾驶员座舱里充斥着刻度盘和仪表,它们对于保持交通工具在空中飞行以及安全地起飞和降落都很重要。不过,把所有这些仪器都展示给玩家并期望他们仅仅在几分钟内就理解它们的功能是不合乎情理的。因此,只有少数几个最重要的仪器将包括在飞行模拟中,使得玩家更容易掌握控制设备以及他们在驾驶飞机时必须做什么。如果涉及战斗,那么甚至要关心更多的控制设备,因为玩家在跟踪和攻击敌人时必须避免飞机坠毁。
游戏是现实的抽象。即使最逼真的游戏也不能包括进现实世界里的每个元素,以免玩家在一些琐事上花费太多的时间,以致有趣的玩法元素丢失在过重的负担中。游戏设计的大量工作将涉及删除无关紧要的元素,以便关注那些确实最重要并且最令人愉悦的元素。例如,在棋盘游戏《大富翁》(Monopoly)中,游戏玩法是关于获得房地产并开发它们的,最终将接管整张棋盘,并驱使其他玩家破产。最重要的游戏玩法是购买房地产的契约,并尝试购买相同颜色或类型的所有房地产。建造房子和旅馆是次要的玩法元素,并且被高度抽象化。游戏的发明者Charles BDarrow可能包括了一些规则,用于缓慢地逐层扩大房子,然后用推土机推平房地产,把住宅区转换成商业区并提供旅馆。但是这些规则甚至进一步减缓了游戏进度,并使之不怎么流行,即使它更接近现实。他决定抽象化房地产的全部建筑方面,使得有利于玩家执行购买和支配的动作。
在处理初始理念时,设计师应该尽可能地充实它。使用原型测试游戏玩法可以帮助设计师选择在最终的游戏中要包括哪些元素,以及要削减哪些元素。最好在早期采用过度设计并在制作期间修剪一些特性,而不要在以后认识到游戏中没有足够的活动而不得不在制作过程中添加更多的材料。以后在Alpha阶段执行更改不仅要付出非常高的代价,而且可能导致已经构建的资产出现问题。
27校正系数
由于游戏不会尝试精确地模仿现实生活,因此设计师可以添加某个校正系数,以使游戏中的动作比它们在现实生活中更令人兴奋。角色和交通工具可以比现实生活中更快地移动和调遣。战斗将快速解决,而不会出现持续很久的交火场景。资源将在需要时出现。设计师可以像魔术师那样使事情的发展出人意料,以使游戏保持向前进行并且有趣。
例如,角色扮演游戏的主要特点是玩家的能力将随着时间的推移而增长。玩家变得更强大,可以更快地移动,并且变得越来越像超人。在现实生活中,持续锻炼将改善人们的身体素质,但是对于人们可以做多少事情是有限制的。在游戏中,可以忽略这种限制。因此,角色变成了可以携带多种武器、大量弹药和无限的健康药水的超人。只要玩家愿意暂时收起自己的疑心,就会接受游戏世界的约定。如果设计师拘泥于现实世界的限制,那么玩家的存货清单将要空得多,并且游戏很可能不怎么有趣。
在处理敌方部队时,设计师必须小心使用校正系数,因为玩家可能注意到计算机给敌人提供了帮助——例如,在玩家转身时哨兵能够察觉他,或者敌人总会找到通往玩家部队的最快路线,因此他们将觉得被游戏欺骗了。不过,玩家也可能永远不会注意到计算机正在欺骗他们,因为他们被游戏中的超现实事件深深地吸引住了。
28小结
在动手处理一款新游戏时,设计师必须考虑玩家将在玩游戏期间做什么有趣的事情,然后查明那些“有趣”的游戏动作或机制将如何工作。仅仅含糊地表达游戏玩法是不够的,例如,指示“团体成员在战斗期间可以利用剑和弓以及魔咒作战”。设计师必须足够详细地解释格斗(利用近身武器)、远程战斗(利用弓箭)和魔法战斗的工作方式,使得程序员可以创建支持这些动作的代码。但是,设计师不应该尝试在设计流程中及早地通过过于具体的细节束缚程序员,直到在原型中测试了一些设计选择之后才可以这样做。随着游戏逐渐成形,游戏机制将变得更清晰,并且应该持续不断地更新文档,以反映最新的更改。
在本章中,重点讨论了构成游戏玩法的元素以及这些玩法元素的底层机制。在后面各章中将更详细地探讨这些机制,但是目前重要的是理解在游戏设计中是如何使用数学的。良好的设计师需要扎扎实实地理解基本的数学和逻辑学,因为游戏中将使用大量数学知识。
29练习
1玩至少3类复杂的游戏(例如,角色扮演游戏、实时战略游戏和第一人称射击游戏等),并且列出这些游戏中你感觉“有趣”的元素。
a在不同类型的游戏(例如,移动游戏或战斗游戏)中可以找到类似有趣的元素吗?
b如果有基本的相似性,如何把一种题材与另一种题材区分开?
c在一篇短文档中写下你的结论。
2基于第1章的练习列出你想设计的游戏中所有游戏玩法元素,初步估计一下,期望玩家花在每个游戏玩法元素上的时间百分比。
3玩至少3个复杂的计算机视频游戏,它们与你计划设计的游戏属于同一类别。
a尝试在玩游戏时自己计时,查看你在每种游戏玩法机制中所花费的实际时间。
b把这些结果与你在“练习2”中提出的百分比做比较。
4列出你在玩3个复杂的游戏时所注意到的元素,这些元素不会对游戏玩法起到支配作用。
a这些元素对于每个游戏有多重要?
b如果游戏中没有这些元素,你能玩这些游戏并沉醉其中吗?
5对于你玩过的3个复杂的游戏,写下你自己的关于游戏玩法机制的描述。对于每种机制,可以用一个或两个段落描述它们,但是要尝试在描述中捕捉到每种机制的本质。
6分析你玩过的3个复杂的游戏是如何逼真地模拟现实的,简短地描述每个游戏,说明哪些游戏玩法元素感觉“逼真”,哪些元素被抽象化或者完全被忽略。
7查看你在本章中作为练习玩过的3个游戏,讨论哪些游戏具有最大的“校正”系数。
a如何对现实进行“抽象化”以使游戏更有趣?
b它们完全忽略了哪些现实世界的动作?
c与其他人讨论你的发现,了解他们在所玩过的游戏中注意到的校正系数。
8在你的“游戏设计文档”大纲中注明你希望哪些游戏玩法元素感觉“逼真”,以及你认为哪些元素可以进行“校正”以使游戏更有趣。
第3章
Chapter 3
游戏中的数学和逻辑学
幸运的是,游戏设计中使用的数学相对比较简单:主要是加法和减法,偶尔会用到乘法。不过,程序员使用的数学要复杂得多,涉及微积分、解析几何、四元数及其他高级主题。即使设计师不需要精通高级数学知识,对它们有一个基本的了解也是有帮助的,这样就可以在游戏制作期间与编程团队进行深入交流。良好地理解逻辑学也很重要,特别是布尔逻辑学,它用在脚本语言中,用于在玩游戏期间更改游戏场地上的条件。
31概率和统计
设计师需要学习的数学知识之一是概率和统计。许多游戏功能都涉及生成某种类型的随机数,并且设计师应该理解概率的基础知识——给定的结果出现的可能性有多大。在一些游戏中,多个随机的结果可能来自于一种游戏机制,例如,在角色扮演游戏中确定一次关键的击中,理解可能的结果发生的概率对于成功地平衡游戏是很重要的。
统计可用于在结果发生之后对其进行分析,也是一种用于平衡游戏玩法的重要设计工具。如果测试报告每次遭遇战对敌人的关键击中都会发生多次,那么关键击中的概率很可能太高了。在初始设计流程期间,设计师可以使用纸质原型测试一些更重要的游戏机制,查看它们是否处于自己所设想的界限内。在流程中及早处理数字可以在测试和调试期间节省相当多的工作。
专门去学概率和统计课程的缺点是:它通常假定学员已经基本掌握了微积分,并能用于发现许多解决方案。不过,有一些在线网站提供概率的基本课程,而不会涉及过多的细节。
311掷硬币
最简单的概率是掷硬币,其中只有两种可能的结果(忽略硬币落在其边缘上的概率):正面和反面。掷一次硬币出现任何一种结果的几率是50%。如果掷两次硬币,那么结果仍然是几率各50%。不过,要查看两个正面或两个反面多久出现一次,可以利用可能的结果创建一个简单的图表(参见表31)。
表31掷两次硬币的结果
第一次掷硬币第二次掷硬币第一次掷硬币第二次掷硬币
正面正面正面反面
反面正面反面反面
出现其中任何一种结果的几率都是25%。不过,硬币出现两次正面或反面的可能性只有获得一个正面和一个反面的可能性的一半。也就是说,掷出一个正面和一个反面的几率是50%,而掷出两个正面或两个反面的几率只有25%。
当把硬币掷更多次时,将越来越不可能全都是正面或者全都是反面。掷3次硬币,将有8种可能的结果,并且有2/8(25%)的几率获得全部正面或者全部反面,而有75%的几率获得一个混合的结果。同样,掷4次硬币,将有16种可能的结果,并且有2/16(125%)的几率获得全部正面或者全部反面,而有875%的几率获得一个混合的结果。每次另外增加一次掷硬币,结果将是2的下一个幂:掷1次=21(2个结果);掷2次=22(2×2或4个结果);掷3次=23(2×2×2或8个结果);掷4次=24(2×2×2×2或16个结果),等等。
当只有两个可能的结果时,人们可以相对容易地在头脑中搞清楚结果。大多数游戏没有只基于两个可能结果的机制,因为这样的机制很快就会变得令人厌烦。在希望事情变得更有趣(例如,添加赌博作为一种机制)之前,你只能参与掷硬币游戏这么长的时间。
312游戏中的“掷硬币”
尽管现代游戏很少使用“正面或反面”方法来决定动作,因为结果的数量是如此有限,但还是有一些源自古老文化的游戏确实使用了这种方法。在古埃及,一款称为《Senet》的流行的棋盘游戏使用了掷棒,它们的一边是红色的,另一边是白色的(参见图31)。每根木棒可能得到的结果与掷硬币相同:2个。《Senet》使用4根或更多的掷棒为棋盘上四处移动的棋子生成随机的结果。一次使用4根掷棒允许出现16个可能的结果,这与掷4次硬币相同。尽管用于《Senet》的规则是未知的,但是掷棒的一边(例如,红色)似乎可能意味着棋子可以移动一个空格,而另一边则意味着不移动棋子。因此,如果全部4根掷棒都显示红边,就可以把棋子移动4个空格,而4根显示白边的掷棒则意味着那一个回合不允许移动棋子。
图31在《Senet》的PSNeeley的在线版本中,玩家轮流通过计算机掷木棒来确定在棋盘上移动多少个空格。4根木棒(底部)最终都显示白边
因此很容易确定《Senet》中移动的概率:
所有边都显示白色的几率是1/16(167%),意味着那一个回合不移动棋子。
1根木棒显示红色的几率是4/16或25%,因此那一个回合可以把棋子移动1个空格。
2根木棒显示红色的几率是6/16或375%,因此那一个回合可以把棋子移动2个空格。
3根木棒显示红色的几率是4/16或25%,因此那一个回合可以把棋子移动3个空格。
所有边都显示红色的几率是1/16(167%),因此那一个回合可以把棋子移动4个空格。
印度的许多游戏都使用贝壳来生成随机数。在掷贝壳时,贝壳落地时要么嘴朝上,要么显示其闪光的壳。这种方法与使用掷棒或者“正面或反面”相同。
应该提及的是,现代游戏确实会使用“正面或反面”方法,尽管不是在玩游戏期间使用它。如果美式橄榄球游戏在第四节末尾以平局结束,就掷硬币来确定哪个队将在加时赛中获得球权。在足球、排球、板球及其他游戏中出于类似的目的也使用了掷硬币的方法。在一些决斗中,掷硬币用于确定哪位决斗者将背对着太阳。在一款游戏中掷硬币非常重要,它是新西兰的一款Big Wednesday彩票游戏,其中抽到6个正确数字的玩家然后必须在掷硬币时正确地预测出正面或反面,以确定最终的奖金数额。
32游戏中的随机选择
大多数游戏都包括某种随机选择,以向结果中添加不确定性。少数几种游戏(比如《国际象棋》和《西洋跳棋》)不依赖于随机选择,能否赢得游戏完全依赖于玩家的技能。这样的游戏称为完全信息博弈(perfect information game),因为不会对玩家隐藏任何东西,所以他们能够准确地知道从一个回合到下一个回合可能发生什么。在这样的游戏中没有隐藏的信息(例如,采用面朝下的方式发牌),也没有随机选择。
大多数视频游戏都依赖于一些随机选择,它们不仅可以使玩家猜测接下来将发生什么,而且允许重玩游戏,因为每种玩游戏的经历都将不同,即使起始条件总是相同的。这样的游戏是不完全信息博弈(imperfect information game),因为玩家不能预测使用随机选择的游戏动作的结果。《俄罗斯方块》(Tetris,由Alexey Pajitnow设计)就是不完全信息博弈的一个示例,因为玩家不知道哪些方块(拼板)将以什么顺序出现在屏幕的顶部。游戏中有7种方块,并且它们将随机出现,让玩家迅速断定把它们放在哪里。
321随机数生成器
在过去的日子里,用于计算机和视频游戏的处理能力非常有限,程序员可能创建一大张随机数的图表,并且游戏引擎将随机地选择起始数字。例如,计算机将使用当前的毫秒来确定图表中的起始位置。这种方法是有问题的,因为玩家可能从表格中发现结果的模式,从而能够进行欺骗。此外,图表中的数字实际上可能不是随机的并且遵循看不见的模式,这同样允许玩家发现重复的模式。
随着游戏平台变得更强大,程序员转而求助于伪随机数生成器——生成长长的随机数系列的算法,它们的值由称为种子(seed)的固定值确定。这种方法的问题是:最终数字序列将开始重复,或者算法将会使用别的位置所需要的过多内存。用于生成伪随机数的算法随着时间的推移而变得更复杂,因此玩家不太可能发现他们可以做出反应的模式。
可以证明在游戏制作期间极其有用的一个工具是文本捕捉程序,它可以把随机数生成算法的结果加载进一个文本文件中。虽然设计师可以尝试从视觉上分析结果,但是创建另一个用于在文本文件中搜索模式的工具将是有帮助的。只要没有找到明显的错误或者重复的序列,玩家将不太可能注意到游戏中有什么出错了。如果检测到问题,程序员就可能希望试验不同的算法。
322把骰子用于随机选择
在棋盘游戏中,随机选择可能具有多种形式。玩家可能需要使用转盘来生成随机数,或者从一摞纸牌中抽出一张纸牌使每一个回合都不同。通常,与棋盘游戏最紧密关联的方式是掷骰子(两粒或更多粒骰子)来生成随机数,然后把它们用于确定移动、战斗或其他游戏动作。
一些游戏使用单独一粒6面的骰子(在游戏用语中称之为d6)来生成随机数。在这种情况下,掷出任一数字的几率是1/6(166%)。使用单独一粒骰子只能提供有限数量的结果,并且出现任何一种结果的概率是相等的。
大多数游戏倾向于使用两粒6面的骰子(称为2d6),以获得更高的数字和结果的不同概率。与单独一粒骰子不同,其中出现所有结果的概率是相等的,在掷两粒骰子时,结果可能会有极大的变化。掷两粒骰子可以出现36个可能的结果。注意:没有结果“1”,因为每粒骰子的最小数字是“1”,并把它们相加到一起时,结果就等于“2”。表32显示了掷2d6骰子所得结果的百分比,图32则把结果显示为形象的钟形曲线。
表32掷2d6骰子的结果
骰子
总数几率百分比
21/3628%
32/3655%
43/3683%
54/36111%
65/36138%
(续)
骰子
总数几率百分比
76/36167%
85/36138%
94/36111%
103/3683%
112/3655%
121/3628%
注:显示了掷两粒6面的骰子所得结果的几率和百分比。
图32这幅图显示了在掷两粒6面的骰子时所得到的钟形曲线
在掷出“7”时很可能出现一个意义双关的结果(在两种情况下都是167%),注意到这一点是有趣的。在游戏中使用两粒骰子很流行,尤其是在赌博游戏中。结果偏向于中间的数字(6、7和8),并且玩家极少掷出极端的结果(2和12)。在具有大约40个空格的棋盘上,比如《大富翁》的棋盘,中间的结果意味着以一种优雅的速度移动标记,急速或极其缓慢的移动只会偶尔发生。
323看待掷骰子的另一种方式
迄今为止,在游戏中使用6面的骰子有一些缺点。掷多粒骰子并把数字累加起来意味着对于两粒骰子最小的结果永远不会是“1”,对于3粒骰子最小的结果永远不会是“2”,对于4粒骰子最小的结果永远不会是“3”,等等。此外,大多数结果都挤在钟形曲线的中间,不可能给所有的骰子结果分配相等的几率。还有其他一些方式处理两粒骰子,并且可以得到比简单的钟形曲线更有趣的结果。
一种方法是掷出骰子并按顺序处理结果,而不是把它们累加起来。例如,在一款游戏中,玩家可以选择一次一粒地掷出两粒骰子(2d6)。他掷出第一粒骰子,并且在决定掷出第二粒骰子之前考虑结果。也许使用第一粒骰子的结果就可以让他把他的标记移到一个具有积极结果的空格上,因此他决定使用这个结果,并且完全忽略第二粒骰子。或者,如果他不得不掷出第二粒骰子,那么他将在第一次移动标记之后再把标记移动第二次掷骰子所确定的空格数——实际上是在同一个回合中移动两次。在《西洋双陆棋》(Backgammon)中使用了类似的方法,其中玩家可以把掷骰子的结果分给两颗棋子,或者使用组合的结果来移动一颗棋子。
另一种方法是使用结果的矩阵。在这种情况下,对应于第一次掷骰子的行与对应于第二次掷骰子的列是交叉引用的。在这种情况下,有36个潜在的结果,并且获得任何结果的几率是相等的。例如,在表33中,第一次掷出的“3”与第二次掷出的“4”交叉引用,从而得到结果16。在一些游戏中使用了矩阵,尤其是在纸面上的战争游戏中解决战斗。
表33矩阵交叉引用按顺序掷出的两粒6面骰子的结果
第一次掷骰子的结果
第二次掷骰子的结果
123456
1123456
2789101112
3131415161718
4192021222324
5252627282930
6313233343536
33百分比
20世纪80年代,在Gen Con展会上向游戏业中引入了第一粒10面的骰子(五角偏方面体),并使之迅速适用于许多角色扮演游戏和一些棋盘游戏。百分比骰子(percentage dice)使用得更早一些,但是大部分是20面,需要玩家把骰子的结果除以“2”,以获得一个1~100之间的百分比结果。这样一粒10面的骰子(称为d10)的优点是:通过按顺序掷两粒骰子,可能生成100个数字。其中一粒骰子被指定用于十位上的数字,另一粒骰子则用于个位上的数字,从而得到范围1~100或00~99(后一种配置在电子形式的游戏设计中更常使用)。在两粒骰子上00的结果可能代表00或100。两粒10面的骰子被称为百分骰子(percentile dice)。
在游戏中使用百分骰子具有双重优点。第一,掷出每个数字的几率相等,这与掷2d6所得到的钟形曲线结果不同。第二,设计师可以给结果指定不同的范围,而不是采用一种一对一的关系,即掷出的一个数字对应一种游戏动作。例如,如果设计师希望一种游戏动作最频繁地发生,他就可以为该动作指定1~50的范围。然后可以给不太频繁发生的动作指定较小的增量,向下直到出现掷单独一粒骰子的结果,这将使该结果非常少见(1/100或1%的几率)。因此,用于角色扮演游戏的百分战斗表格可能如表34所示。
表34示例战斗表格(2d10)
数字战斗结果几率
1~5未击中(无伤害)5%
6~15间接攻击(承受75%的伤害)10%
16~65正常攻击(100%的伤害)50%
66~80猛烈攻击(125%的伤害)15%
81~95非常猛烈的爆炸(150%的伤害)15%
96~100关键击中(在关键击中表格上掷骰子)5%
注:这个简单的战斗表格进行了加权处理,使得大多数攻击将导致目标承受标准的伤害(依赖于计算伤害的方式)。
体育游戏
大多数游戏不会使用3粒10面的骰子,因为很少需要具有1~1000的结果。不过,体育游戏(尤其是棒球)通常把百分比表达成3位。具有赢得比赛平均分(Earned Run Average,ERA)0346的击球手就是值得尊敬的强击手。在棋盘或视频游戏中,可以通过掷骰子确定击球手是否击中了投出的球。虽然6面的骰子可用于决定挥臂击球的动作,但是结果最终看起来非常相似。对于具有0346 ERA的强击手,在6面的骰子上掷出1或2将意味着一次击中,因为这些结果的概率是33%,它相当接近于ERA。具有0170左右的较差ERA的击球手将只会击中1。极少数的击球手具有接近0500的ERA,因此几乎没有人能够击中1、2或3。大多数击中的结果只会带来1或2的结果,不允许游戏中的击球手之间出现太大的差别。
只使用单独一粒10面的骰子将意味着击球手将击中1~3的结果,并且不会击中其他任何结果。虽然这些结果比使用单独一粒6面的骰子的变化稍多一些,但是更好的击球手仍然会被欺骗。转换到百分骰子将允许更大范围的结果,因为具有0346 ERA的击球手将击中1~34的结果(或者如果在游戏中希望更多的击中,则结果是1~35)。使用这种方法,可以使优秀的击球员和糟糕的击球员之间泾渭分明。
要使用击球手的真正的ERA,将需要3粒10面的骰子,它更接近于现实世界。对于棒球游戏,要尝试尽可能接近地模仿真实的棒球,使用3粒10面的骰子解决挥动球棒的动作是有意义的(玩家的真实统计信息将由美国职业棒球大联盟(Major League Baseball)所有,仅当获得许可时才能使用)。
34视频游戏中的百分比
虽然在棋盘游戏和纸面上的角色扮演游戏中使用1~100的结果非常实用并且容易理解,但是在视频游戏中不必使用它。与纸面上的RPG不同,其中的DungeonMaster将指导玩法和解决玩家之间的冲突,在视频游戏中,游戏动作的决定是由游戏逻辑处理的。可以同样优秀地处理随机化的可能性的任何范围,因此设计师可以自由地使用最适合于每种游戏动作的任何范围。在编码开始前创建游戏的纸质原型的优点是:设计师可以测试游戏动作的多个不同的概率范围,并且在确定最合适的范围之前根据需要执行尽可能多的更改。
如果使用1~100的概率范围感觉更合适,设计师当然可以这样做。当编程团队创建用于决定动作的算法时,他们可以保留设计师想要的范围,或者根据需要更改它们以简化代码。
在为游戏动作设置百分比时,要记住另外两种危险。第一种是要限制每个游戏动作的概率数。如果设计师对于某个游戏动作具有20种不同的可能结果,玩家将不能准确地预测可能的结果是什么。结果中的某种随机性有利于产生有趣的游戏,而太多的随机性则会导致玩家产生挫败感。第二种是确保分配给概率的值在玩游戏期间是有意义的。如果某件事情发生的概率是51%并且它不会发生的概率是49%,那么玩家将把结果看做一半对一半的几率。另外,可以扭曲结果,使得事件发生的概率是70%,并且有30%的可能导致它不会比设计师所希望的更频繁地发生。以原型形式测试游戏机制允许设计师确定良好的初始值。当在代码中实现游戏时,可能需要调整这些值,但是运气好的话它们将不足以引发问题或者导致延期交付。
35使数学知识保持简单
许多复杂的游戏都使用某种类型的数字向玩家展示重要的信息,例如,在一个RPG中需要多少经验值才能到达下一个关卡。在大多数情况下,数字应该相对较小,并且一眼看上去就容易理解。如果展示给玩家的数字达到了数千或者数百万,玩家就要花时间分析它们,以查明正在发生什么事情以及接下来要做什么。让玩家同时处理太多的数字也是很困难的,因此,如果在整个界面屏幕上填充许多不同的数字字段,那么它看上去可能更像是Excel电子表格,而不是游戏中的屏幕。同样,随着更多的视频RPG转向实时的战斗动作(而不是回合制),玩家在决定攻击时,如果在屏幕上看到大量的数字飞来飞去,可能会感到混乱。
如果数字出现在玩游戏期间使用得不太多的次要屏幕上,那么它们可以是比较大的数字,因为玩家将有许多时间来确定需要多大的经验值才能到达下一个关卡。同样,在模拟游戏或角色扮演游戏中,随着时间的推移可能积攒一大笔钱,在购买或销售物品、检查玩家的当前状况或者执行其他涉及金钱的动作时,显示钱数可能是有用的。只要不在战斗或求解谜题期间弹出巨大的数字,玩家就不会因为尝试理解他拥有的游戏物体值多少钱而分心。
在许多游戏中有一种趋势,即削减玩家必须处理的数字,并用其他视觉提示替换它们。在角色附近显示一个图标,随着玩家在战斗中造成更多的伤害,它将变得越来越红,这样一个图标就可以替换在决定每次攻击时在屏幕上充满的大量数字。同样,仪表和计量仪通常用于显示击中点数或者角色剩下的神力(提供魔力的神秘物质)。可以使用一个倒数计时器来显示在某个动作发生前还剩下多少时间(例如,中毒的玩家还能活多长时间,或者新的作战部队被安排何时出现)。不过,使用太多的图标反映游戏动作决定可能同样是危险的,因为玩家仍然要花时间记住每个图标代表什么。在向一大群敌人发起攻击期间,尝试挑选出每个图标并且记住它的含义也可能导致玩家负担过重。
36通过算法定义玩法
依据Wiktionarycom上的说法,算法是“计算过程的精确的、逐步的计划,它开始于一个输入值,并且会在有限的步骤内产生一个输出值”。在描述游戏玩法时,设计师应该在脑海中使描述接近这个定义。游戏中的每个动作都应该通过算法来定义,它是用于决定每个动作的逐步的过程。算法描述不必是一个数学公式,但是它应该给程序员提供足够的信息,以便搞清楚如何编码过程。
有时,算法可能非常短,例如,在回合制游戏中,其中的单元具有移动点,那么用于描述移动动作的算法可能是:“当某个单元进入允许的空间时,将从该单元剩余的移动点总数中减去进入该空间的移动点成本。如果该单元没有足够的移动点,它将不能进入该空间,并且会显示一条报警消息来警告玩家。否则,该单元将进入此空间中。”注意,有一些事情需要详细描述,以提供关于算法条件的更多信息。在刚才提到的示例中,设计师希望解释“允许的空间”意指什么,即某个单元可以进入的空间,与包含不可通行地区的空间相对。
在其他时间,算法可能相当复杂,并且具有许多不同的步骤,例如,角色扮演游戏中的战斗决定。它有助于逐步地分解步骤,并且包括一个示例,以帮助程序员理解流程。
37逻辑和脚本语言
对于设计师来说,良好地理解公共逻辑以便能够彻底思考设计决策的结果非常重要,理解脚本语言中以种种形式使用的布尔逻辑和条件语句的基础知识同样重要。就游戏设计而言,脚本语言有两种定义。第一种定义是由游戏开发者创建的特殊的专有编码语言,并被关卡设计师用在玩游戏期间触发事件,例如,遭遇敌人、更改与NPC的对话,以及控制NPC的行为和运动。这种语言有时直接绑定到关卡或地图编辑器上,以便设计师可以在构建关卡时启用事件。第二种定义是特殊的商业编码语言,比如PERL、JavaScript、Lua或Python,它们用于控制软件应用程序中的某些方面。一些游戏开发者在关卡编辑器中使用像Lua或Python这样的脚本语言,而另外一些开发者则会创建自己的语言。
尝试使用脚本语言的麻烦是:它们可能非常像标准的C/C++代码,因此非程序员的人将难以使用它们。游戏开发者设法使他们专有的脚本语言更容易被非程序员的人(意指设计团队和公众)使用。许多公司允许玩家操作工具,用于构建游戏以及创建新关卡,并可以与朋友共享它们,这称为改装(modding)。包括用户友好的脚本语言可以显著延长游戏的保质期,甚至可能导致由玩家构建并由游戏公司销售的商业附件。
任何事情发生之前,必须通过游戏引擎代码解释脚本语言。就像设计师用法语(这是他非常拿手的语言)编写脚本,并把脚本交给印刷者以便用英语版本发布它。印刷者必须把法语翻译成英语,然后确保最终的解释与原作者想要表达的意思相一致。作者和印刷者都必须同意遵守某些约定(例如,句子结构)。一旦制定出协议,设计师就可以潦草地书写新内容,而印刷者则必须艰苦地制作博学的英语文档的最终版本。在解释脚本时,这种安排需要一定的滞后时间,但是它确实允许工作人员以他自己的速度相互独立地工作。
同样,一旦编程团队设计并编码了脚本语言,设计师就可以使用它(参见图33)。只要设计师保持在既定的指导原则内,该语言应该允许他创建和更改游戏中的事件,而不必要求程序员重新编译主引擎代码。脚本运行得比原始代码慢,因为必须解释它们,但是现代计算机和控制台具有如此之大的处理能力,以至于在玩游戏期间极少注意到速度变慢的情况。
图33UnrealKismet是在Epic Games的Unreal引擎中使用的一种可视化脚本编程系统,允许设计师利用连接线创建条件和结果动作之间的链接
371条件语句
大多数专有的脚本语言都会使用某些逻辑过程。设计师应该熟悉这些过程,因为它们对于在玩游戏期间改变某些事情是至关重要的。其中一些过程直接来自于编程,但是它们难以理解和使用。条件语句通常用于检查当前的游戏状态,以便查看是否需要改变事情。例如,如果条件最初被设置为“假”,但是现在为“真”,就发生了改变(反之亦然)。否则,只要语句保持为“假”,现有的条件将继续起作用。这些语句称为“ifthen”结构(也称为“ifthenelse”结构)。在代码中,结构可能如下所示:
在这种情况下,脚本将检查是否找到了Stone Sword物品,如果还没有找到,那么将在屏幕上显示适当的文本。
可以扩展相同的结构,以涵盖更多的情况:
在这种情况下,ACTIVE和COMPLETE是由代码检查的变量。如果变量为ACTIVE,那么将显示第一条消息,并且当找到剑时,将变量更改成COMPLETE,并显示第二条消息。可以扩展该结构,以包括许多其他的变量,尽管在这种情况下游戏代码总是会使用当前设置的变量。
这是一个说明脚本在游戏中如何工作的简单示例。脚本可以相对简单或者相当复杂,这依赖于设计师的需要。一些脚本是用伪代码或者用Lua等商业脚本语言编写的,而另外一些脚本(比如Epic Games的UnrealKismet)则具有更加用户友好的图形界面。自学使用专有的脚本语言是新手获得游戏公司里的入门级职位所需技能的良好方式。许多游戏都带有关卡编辑器,它也包括专有的脚本编程系统。
372布尔运算符
对条件语句的状态执行多种检查是可能的,从而允许设计师处理更复杂的情况。例如,在上面的示例中,只需检查两个变量,以查看Stone Sword任务是否是活动的。脚本语言可以包括逻辑连接词(或布尔运算符),然后可以在执行操作前确定多个变量的状态。最常见的运算符是AND、OR和NOT。AND运算符要求在动作发生前关于条件的所有变量都为“真”。OR运算符将检查是否至少有一个关于条件的变量为“真”,NOT运算符则会检查没有变量为“真”。可以结合使用几个运算符,以在采取动作前检查许多变量,如果没有条件为真,将默认执行ELSE动作。
例如,在上一个示例中,如果需要两个条件以启动Stone Sword任务(在这个示例中,是与两个NPC交谈),构造可能如下所示:
该代码将检查用于启动Stone Sword任务的文本的变量是否被设置为“1”(意味着玩家与关于任务的两个角色交谈)。注意,圆括号中的两条语句都放在第二个圆括号内,其中包括布尔运算符AND。如果设置了两个变量,那么任务就是活动的,并且角色的对话现在将从启动任务变成询问任务是否已完成。如果设计要求玩家与两个角色中的任何一个交谈以开始任务,那么用于启动任务的逻辑将如下所示:
第二个示例简单地利用OR替换AND将完全改变启动任务的方式。这些简单的布尔运算符非常强大,并且可用于在游戏中创建一些非常有趣的情况。设计师应该理解布尔逻辑的基础知识,因为在脚本语言中使用它来启动任务、给玩家支付报酬、更改NPC对话选项,等等。
应该提及的是,许多专有的脚本语言利用图形快捷方式屏蔽了布尔运算,使得设计师更容易设计出在游戏场地上所发生的事情的逻辑。例如,在图34a中,有两个条件方框,它们利用箭头链接到一个动作方框,只要方框之间没有链接,游戏引擎就会把它解释为一个OR运算,其中,如果任何一个条件为真,则动作都将发生。在图34b中,两个条件方框都通过它们之间的一根线条连接起来,并且利用一个箭头链接到动作方框。在这种情况下,连接线充当AND语句,使得仅当两个条件都必须为真时动作才会发生。
图34
a)显示了一个OR语句,其中如果任何一个条件为“真”,则动作就会发生
b)显示了一个AND语句,其中仅当两个条件都必须为“真”时动作才会发生
38小结
在玩游戏期间使用的数学知识通常相当简单,尽管代码中使用的数学知识可能非常复杂。玩家不希望由于在玩游戏期间不得不处理许多数字而分心,因为他们的大脑必须从控制角色的动作转换到记住数字的含义。许多游戏回避了数字,而是通过像计量仪和量表这样的图标以图形方式显示数量。因此,虽然设计师不一定需要上高级的数学课即可设计游戏,但是他们应该基本理解游戏引擎使用的是哪一类数学知识,以便能够与编程团队充分交流。
另外,如果设计师希望在设计关卡时使用公司专有的脚本语言,则应该很好地理解布尔逻辑的基础知识。脚本允许设计师在玩家执行动作时更改游戏世界的状况,因此理解布尔逻辑的基础知识对于学习任何脚本语言都很重要。否则,设计师将不得不与程序员合作,以在游戏进行过程中执行他们考虑的更改,这不仅会延缓开发流程,而且可能导致计划外的或者错误的效果,这些可能要花相当多的时间和精力来进行校正。布尔逻辑是设计师的基本工具。
39练习
1计算出掷3枚硬币时正面和反面的百分比,然后计算出4枚硬币的情况。它们也会形成钟形曲线吗?
2使用冰棒棍或压舌板制作6根掷棒,把一面涂上颜色以示区分(可以把单独一根木棒分成3段,以实现相同的效果)。在掷5根或6根木棒时,每一面的百分比是多少?
3尝试利用掷棒玩一个使用6面的骰子的棋盘游戏(例如,Hasbro的《大富翁》)。如果游戏需要“双数”,考虑当所有相同颜色的木棒显示为一个双数时的结果。
a暂时使用4根木棒,然后转而使用5根木棒,最后使用6根木棒。
b利用骰子玩游戏与利用木棒玩游戏之间有什么区别?
c添加更多的木棒会加快玩游戏的速度吗?
d撰写一篇短文,概括说明你发现的利用木棒玩游戏与利用骰子玩游戏的观点。
4收集具有不同面数的骰子。对于每种类型,都要设法获得至少两粒该类型的骰子。特别是,确保具有至少两粒10面的骰子。
a现在利用不同的几对同类型骰子玩“练习3”中的棋盘游戏(即两粒4面的骰子、两粒10面的骰子等)。
b确保你处理的是累加的骰子总数(例如,使用两粒10面的骰子将得到2~20之间的结果)。
c比较利用掷棒玩游戏与利用不同类型的骰子玩游戏。
5为棋盘游戏创建掷棒表格(Throw Table),使用两粒10面的骰子生成百分比结果(即1~99或2~100之间的结果)。
a第一个掷棒表格应该具有所有等值的结果。
b下一个掷棒表格应该进行加权处理,使得某些骰子的结果比其他骰子更常见。
c最后一个掷棒表格应该是某种类型的矩阵。注意:对于矩阵,你可能希望把数字结果与可能的游戏玩法机制结合起来(例如,“在1个回合中失利”、“移动2个空格并再掷一次”、“后移3个空格”,等等)。
d使用不同的掷棒表格玩“练习3”中的游戏,并且确定哪个表格使游戏玩起来最令人愉悦。
6就像在你享受的职业体育运动里的运动员一样考虑你在游戏棋盘上四处移动的标记。
a查找体育运动里的运动员的统计表,然后为你的标记创建一个“交易卡”,并利用3个或4个统计表作为百分比。
b把每个统计表都绑定到某种游戏机制。例如,如果你使用棒球作为模型,就可以给标记提供0349的击中平均数,以确定它在一个回合中移动的能力。它的得分打(runsbattedin,RBI)统计表可能确定你购买或销售物品或者从银行收款而获得的金钱的百分比。
c尝试使用你为标记开发的“交易卡”玩棋盘游戏。
d在玩游戏时,“交易卡”可以增加你的乐趣吗?
7查看棋盘游戏的规则,看看你能否把它们表达成“ifthen”语句。例如,“如果你落在‘X’空间,那么将收到25美元”。查看是否也可以使用“ifelse ifthen”结构表达这些规则。
8现在查看你能否利用“ifelse ifthen”逻辑结构使用布尔运算符表达棋盘游戏的规则。例如,“如果你落在‘X’空间或者(OR)‘Y’空间,那么将收到25美元”,或者“如果你落在‘X’空间并且(AND)具有黄色的标记,那么将收到50美元,而不是25美元”。尝试使用这种方法创建半打游戏规则,即使它们不直接与你一直在玩的棋盘游戏相关。