液压缸厂家
免费服务热线

Free service

hotline

010-00000000
液压缸厂家
热门搜索:
技术资讯
当前位置:首页 > 技术资讯

关于理想的游戏引擎对规则定义的设想

发布时间:2021-01-21 02:12:14 阅读: 来源:液压缸厂家

近期我撰写系列博文,主题是自己刚刚设计完成并提交至App Store的iOS益智游戏《Connectrode》。现在,我觉得应该从项目中解脱出来,通过编撰其他感兴趣的内容在博客中放松自己。先在此提醒大家注意,文章表达游戏设计和编程中抽象想法的言辞相当随意,我并未将这些想法以最容易理解的形式来阐述,此文的主要目的在于将脑中的想法转移到纸上。

在我的职业生涯中,主要担任各种形式的“游戏可玩性程序员”。其中大部分时间我都在自行设计和执行游戏,这两个方面我都很喜欢。亲自编写代码的游戏设计师并不多,做游戏设计工作的可玩性程序员同样也不是很多。我觉得身兼两职赋予了自己独特的视角,让我构想出新风格的游戏引擎,使游戏制作甚至可以脱离可玩性程序员,直接由设计师来落实想法。

首次萌生这种想法是在设计卡片游戏和桌游原型之时,我发觉这纯粹是种游戏设计而已。尽管与电子游戏相比,能够用于设计桌游的工具极为有限,但这种局限性让你在核心游戏设计方面眼界更宽。在那段时间里,我认为游戏在结构上只包含3个部分:

1、名词:游戏系统元素及其相关变量。示例:玩家,角色,NPC,道具;地图,世界,地点,瓦片,卡片,XP,HP。

2、动词:游戏中代理人(注:玩家或玩家扮演的角色)能做出的动作。示例:攻击,跳跃,移动,贿赂,玩卡片,抛骰子。

3、规则:规定现存名词的性质并营造名词间的关系和互动,规定在何时及何种背景下能做出的动词。示例:在每回合开始时抽取一张卡片,当一个单位攻击另一个单位时,所造成的伤害等于攻击者的基本伤害值;当马里奥在空中时,重力产生的下落加速度为每毫秒1像素。

每款游戏都有此三种元素,但我认为标准结构游戏只含有这三个元素。事实上,我推测所有系统都可以分解成这三个元素,我即将提出的新“引擎”或许将成为开发任意形式游戏乃至任意形式软件的新方法。但在本文中,我将着重阐述自己最熟悉的领域——游戏。

如果这些是所有游戏的结构,那么合理的游戏引擎应该首先专注于将这三样东西模型化,使它们的创建和修改尽量简单易懂。有些游戏引擎似乎能实现上述目标,但看起来都未触及问题的核心。

说到底,我觉得根源在于当前编程范例都没有提供合适的语言来表达这些结构。对“名词”元素而言,此类评述可能并不恰当。顾名思义,面向对象编程擅于呈现各式对象(注:即三元素中的“名词”)及其间可能存在的关系,将重复性代码或无用工作降到最少。但是在任何我所知晓的编程语言中,动词和规则都很难清晰地得到表达。尤其是规则(注:作者认为规则是游戏设计中较为重要且时常改变的元素),我觉得很难通过现有编程或引擎范例来呈现。

假设我在开发平台游戏,想要添加“跳到敌人头上可以踩死它”这个规则,但随后还要添加例外规则“跳到豪猪头上会导致角色死亡”。在当前面向对象编程范例中,我可能通过以下两个步骤来表达此规则:1、为“Enemy”类添加“jumpedOnBy()”功能,body为“die()”;2、在“Porcupine”类中用杀死玩家的body来覆盖这个功能。事实上,我可能不会一成不变地采用这种方法,但上述构思已然很接近自己的做法。

我想说的是,使用面向对象编程的习惯导致自己本能地将此规则表达为名词的性质或行为。我觉得这是个不好的习惯,每个规则都应该以对象呈现。从概念上来说,规则实际上应该“控制”名词并可以进行修改。但是,当前典型的规则呈现方式完全无法做到这一点。这些规则反而是添加到代码的各个位置中。在可玩性代码中,很少看到某项规则精确地在代码中某处表现出来。换句话说,“游戏规则”和“代码群”间很少存在对应关系。

现在想想这个过程,我认为这种编码方法暗示范例需要有所改变,即名词无需有它们自己的行为。在游戏《大富翁》中,桌上的棋子自身没有任何行为,它的作用只是能够位于棋盘不同位置上。将棋子移动是动词(注:“移动”动词由玩家执行),限制和定义移动的是规则(游注:规则约定玩家在执行“移动”动词前必须掷骰子,根据点数来移动棋子)。

如果我们相信代码结构与真正呈现出的概念对象结构的匹配能够使代码简洁且更具持续性,那么就应该改变可玩性代码的范例,使名词自身不具行为,让规则和动词成为一阶对象。而且,应该将此扩展为规则完全由数据驱动并完全由设计师使用引擎工具来定义。我心中理想的游戏引擎是:

1、可玩性设计师可以在游戏引擎中添加规则,利用简单易懂但功能健全的引擎来表达规则。这些规则也能定义名词和动词。

2、随后,设计师可以马上在这些准确定义游戏的规则下体验游戏。他们会发现规则在哪些地方无法营造出想得到的行为,随即进行修改然后再次运行游戏。

3、也就是说,在此工作流程中没有可玩性程序员。看起来就像是游戏设计师坐下来设计桌游,体验游戏并反复修改规则。不同之处在于,现在游戏可以自动执行所有规则,这使得设计师能够制作出复杂得多的游戏。所有电子游戏均是如此。

当然,以上看法是理想情况,现在我们应该怎么做呢?我举了“跳到豪猪头上”规则这个反例,也阐述了不能采用的呈现方法。或许有人会问,能否举例说明我们应该怎么做?

我觉得自己恐怕还做不到,此刻该想法依然仅存在于脑中,而且我认为提供不完整的答案帮不了任何人。但这是我已经想了很久的东西,也愿意投入更多时间来进行研究。搜索“规则基础编程”得出的结果让人倍受鼓舞,因为现在已有大量沿着这些路线发展的编程框架知识,但我对这些内容的探索还不够充分,无法断定它们是否真正能用于我在本文中提到的东西。

以抽象实体呈现规则是个难题,因为人类对“规则”并没有清晰的看法。我不知道是否存在某种可用来表达任何“规则”的语言,或许唯一能实现此等目标的就是人类语言。但也可能不像所说的那么难,我们只需坐下来思索如何以明确的形式来表达这种抽象想法而已。或许某些人已经在这个方向上有了重大突破,抑或已经以此为基础构建出完整的引擎,只是我不知道罢了。

我最大的希望是,此博文能够引发人们更多地思考和讨论这个话题,提出我们可以实现的想法。希望有人能够提供已经以此方式呈现可玩性代码的范例,或者至少在此方向上有所突破的内容!

彩票大赢家软件

异能少年在都市破解版

我一点都不可口无限金币版

华人娱乐客户端下载