且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《游戏设计师修炼之道:数据驱动的游戏设计》一3.7逻辑和脚本语言

更新时间:2021-10-15 22:56:05

3.7逻辑和脚本语言

对于设计师来说,良好地理解公共逻辑以便能够彻底思考设计决策的结果非常重要,理解脚本语言中以种种形式使用的布尔逻辑和条件语句的基础知识同样重要。就游戏设计而言,脚本语言有两种定义。第一种定义是由游戏开发者创建的特殊的专有编码语言,并被关卡设计师用在玩游戏期间触发事件,例如,遭遇敌人、更改与NPC的对话,以及控制NPC的行为和运动。这种语言有时直接绑定到关卡或地图编辑器上,以便设计师可以在构建关卡时启用事件。第二种定义是特殊的商业编码语言,比如PERL、JavaScript、Lua或Python,它们用于控制软件应用程序中的某些方面。一些游戏开发者在关卡编辑器中使用像Lua或Python这样的脚本语言,而另外一些开发者则会创建自己的语言。
尝试使用脚本语言的麻烦是:它们可能非常像标准的C/C++代码,因此非程序员的人将难以使用它们。游戏开发者设法使他们专有的脚本语言更容易被非程序员的人(意指设计团队和公众)使用。许多公司允许玩家操作工具,用于构建游戏以及创建新关卡,并可以与朋友共享它们,这称为改装(modding)。包括用户友好的脚本语言可以显著延长游戏的保质期,甚至可能导致由玩家构建并由游戏公司销售的商业附件。
任何事情发生之前,必须通过游戏引擎代码解释脚本语言。就像设计师用法语(这是他非常拿手的语言)编写脚本,并把脚本交给印刷者以便用英语版本发布它。印刷者必须把法语翻译成英语,然后确保最终的解释与原作者想要表达的意思相一致。作者和印刷者都必须同意遵守某些约定(例如,句子结构)。一旦制定出协议,设计师就可以潦草地书写新内容,而印刷者则必须艰苦地制作博学的英语文档的最终版本。在解释脚本时,这种安排需要一定的滞后时间,但是它确实允许工作人员以他自己的速度相互独立地工作。
同样,一旦编程团队设计并编码了脚本语言,设计师就可以使用它(参见图3-3)。只要设计师保持在既定的指导原则内,该语言应该允许他创建和更改游戏中的事件,而不必要求程序员重新编译主引擎代码。脚本运行得比原始代码慢,因为必须解释它们,但是现代计算机和控制台具有如此之大的处理能力,以至于在玩游戏期间极少注意到速度变慢的情况。

《游戏设计师修炼之道:数据驱动的游戏设计》一3.7逻辑和脚本语言

3.7.1条件语句

大多数专有的脚本语言都会使用某些逻辑过程。设计师应该熟悉这些过程,因为它们对于在玩游戏期间改变某些事情是至关重要的。其中一些过程直接来自于编程,但是它们难以理解和使用。条件语句通常用于检查当前的游戏状态,以便查看是否需要改变事情。例如,如果条件最初被设置为“假”,但是现在为“真”,就发生了改变(反之亦然)。否则,只要语句保持为“假”,现有的条件将继续起作用。这些语句称为“ifthen”结构(也称为“ifthenelse”结构)。在代码中,结构可能如下所示:

《游戏设计师修炼之道:数据驱动的游戏设计》一3.7逻辑和脚本语言

在这种情况下,脚本将检查是否找到了Stone Sword物品,如果还没有找到,那么将在屏幕上显示适当的文本。
可以扩展相同的结构,以涵盖更多的情况:
《游戏设计师修炼之道:数据驱动的游戏设计》一3.7逻辑和脚本语言

在这种情况下,ACTIVE和COMPLETE是由代码检查的变量。如果变量为ACTIVE,那么将显示第一条消息,并且当找到剑时,将变量更改成COMPLETE,并显示第二条消息。可以扩展该结构,以包括许多其他的变量,尽管在这种情况下游戏代码总是会使用当前设置的变量。
这是一个说明脚本在游戏中如何工作的简单示例。脚本可以相对简单或者相当复杂,这依赖于设计师的需要。一些脚本是用伪代码或者用Lua等商业脚本语言编写的,而另外一些脚本(比如Epic Games的UnrealKismet)则具有更加用户友好的图形界面。自学使用专有的脚本语言是新手获得游戏公司里的入门级职位所需技能的良好方式。许多游戏都带有关卡编辑器,它也包括专有的脚本编程系统。

3.7.2布尔运算符

对条件语句的状态执行多种检查是可能的,从而允许设计师处理更复杂的情况。例如,在上面的示例中,只需检查两个变量,以查看Stone Sword任务是否是活动的。脚本语言可以包括逻辑连接词(或布尔运算符),然后可以在执行操作前确定多个变量的状态。最常见的运算符是AND、OR和NOT。AND运算符要求在动作发生前关于条件的所有变量都为“真”。OR运算符将检查是否至少有一个关于条件的变量为“真”,NOT运算符则会检查没有变量为“真”。可以结合使用几个运算符,以在采取动作前检查许多变量,如果没有条件为真,将默认执行ELSE动作。
例如,在上一个示例中,如果需要两个条件以启动Stone Sword任务(在这个示例中,是与两个NPC交谈),构造可能如下所示:

《游戏设计师修炼之道:数据驱动的游戏设计》一3.7逻辑和脚本语言

该代码将检查用于启动Stone Sword任务的文本的变量是否被设置为“1”(意味着玩家与关于任务的两个角色交谈)。注意,圆括号中的两条语句都放在第二个圆括号内,其中包括布尔运算符AND。如果设置了两个变量,那么任务就是活动的,并且角色的对话现在将从启动任务变成询问任务是否已完成。如果设计要求玩家与两个角色中的任何一个交谈以开始任务,那么用于启动任务的逻辑将如下所示:
《游戏设计师修炼之道:数据驱动的游戏设计》一3.7逻辑和脚本语言

第二个示例简单地利用OR替换AND将完全改变启动任务的方式。这些简单的布尔运算符非常强大,并且可用于在游戏中创建一些非常有趣的情况。设计师应该理解布尔逻辑的基础知识,因为在脚本语言中使用它来启动任务、给玩家支付报酬、更改NPC对话选项,等等。
应该提及的是,许多专有的脚本语言利用图形快捷方式屏蔽了布尔运算,使得设计师更容易设计出在游戏场地上所发生的事情的逻辑。例如,在图34a中,有两个条件方框,它们利用箭头链接到一个动作方框,只要方框之间没有链接,游戏引擎就会把它解释为一个OR运算,其中,如果任何一个条件为真,则动作都将发生。在图34b中,两个条件方框都通过它们之间的一根线条连接起来,并且利用一个箭头链接到动作方框。在这种情况下,连接线充当AND语句,使得仅当两个条件都必须为真时动作才会发生。
《游戏设计师修炼之道:数据驱动的游戏设计》一3.7逻辑和脚本语言