使用玩家反馈去推动游戏内容的发展

发表于2016-05-30
评论0 2.1k浏览

作者:Daniel van der Meulen

生成程序的发展

基于程序创造关卡似乎能够有效地减少开发时间。但是每次当你去运行它时都要去创造一个能够生成理想结果的算法,而这与设计一组关卡一样需要消耗大量时间。通常大量开发时间都是用于评估生成结果并添加某些限制因素去确保所创造的内容具有可玩性。通过将这种生成内容验证法作为一种优化问题,我们便可以使用现有的算法去找出适合预期结果的解决方法。

像爬山法等简单的优化算法便足以帮我们找到一个有关单一变量的解决方法,但在关卡生成环境中并不存在一种单一的最优解决方法,并且这里可能存在多种变量去推动生成算法的演变。因此遗传算法便是帮助我们找出可行解决方法的内容。遗传算法模仿了自然选择一个问题解决方法的过程。这会生成一组解决方法,然后它们能否解决问题的能力将得到评估。最终最佳解决方法会脱颖而出,并与其特征(变量)结合在一起去创造出全新,且更厉害的解决方法。

geneticAlgorithmOnLevels(from gamasutra)

在我们随着时间的推动去发展我们的关卡前,我们首先需要一个程序内容生成算法。像这样的生成程序可能会是一个非常复杂的算法,但即使是一个只有一些变量的简单执行方法也是足够的。这里所存在的必要条件在于需要一些让我们能够调整算法结果的变量。这些变量将作为生成解决方法的“染色体”并且会随着全新生成内容的出现而发生改变。

生成内容

对于《Captain Collo》,我正致力于创造一个使用细胞自动机去生成2D网格中的大陆和岩石的生成器。在这里大陆和岩石将通过形成阻碍玩家的元素去影响整体的游戏玩法。玩家(和敌人)可以朝地面射击但却不能穿过它,并且玩家不能击破岩石层。在生成地面和岩石后,我便能够找到一个可以放置像敌人等兴趣点的适当位置。

前面几个关卡都是随机生成的。为了发展这些关卡,我们必须基于它们如何带给玩家满足感去评估它们(游戏邦注:也就是一个关卡的乐趣度)。然后我们可以使用这些评分去衡量这些关卡并尝试着将这些关卡的有效功能结合在一起以创造出一个更优秀的新关卡。

但是我们该如何评价这些关卡呢?我们如何才能知道哪个是好的哪个是糟糕的?在大多数遗传算法中都存在一个适应度函数能够评估生成解决方法。但我们却很难去编写一个能够解释生成关卡并分配给它一个适当分数的函数。

适应度函数

有些游戏摸清了玩家行为并权衡了各种游戏数据和玩家输入内容去创造适合玩家的游戏模式。这种玩家模式能够用于在线,实时或离线创造匹配该模式的游戏内容。不过这一方法也拥有一些弊端,特别是在扯到可移植性时,即说明它是针对于特定游戏的。对于独立开发者来说,玩家模式或玩家分析是非常耗时间的,并且可能在其它游戏中就不适合了,尽管这是作为一种有效的适应度函数。正是因为这些限制因素,我选择了基于玩家反馈的进化算法。

我想要使用明确的玩家反馈,即问清楚玩家对于生成内容的看法。我的游戏关卡一般持续时间都较短。每当玩家完成一个关卡时,我便会询问他们对刚刚玩过的关卡的看法。一开始我使用了一个5颗星的评级系统。除此之外还有很多寻求玩家反馈的方式。例如让玩家决定关卡的好与坏或者询问他们是否喜欢该关卡。

evolution loop(from gamasutra)

为了在不破坏游戏流的前提下找出获取反馈的最佳方式,我们需要进行更多的研究。而这种反馈的主要作用便是推动遗传算法的发展。基于这一算法的本性,我们向玩家寻求反馈的主要原因便是避免创造出更糟糕的关卡,即将玩家函数变成生成解决方法中真正的适应度函数。只要这么做能够创造出可以延伸到下一个关卡中的结果,我们便不再需要从玩家身上获取反馈。

个人和全局选择

基于这种方式使用玩家反馈去推动遗传算法存在一个显著问题。遗传算法的根本理念在于我们可以通过人为进化和随着时间发展的变化去创造解决方法。当我们在计算机上使用一个编写好的适应度函数去模拟完整的进化过程时,我们可以在几秒钟内模拟出几百甚至是几千个全新生成内容。而在面对基于玩家的适应度函数时,我们需要等待玩家去尝试并评价关卡生成内容。

当遗传算法只运行于一个玩家的一台设备上时便会形成一个问题。即在你看到一些有意义的结果前它可能会创造许多生成内容。所以这种方法或许更适合用于完整的玩家社区中。通过在一个服务器上运行遗传算法,在玩家上线时分配给他们全新关卡,我们便能够在较短时间内检索到许多关卡的适应度。这种进化方式虽然不能生成匹配单一玩家喜好的关卡,但却能够从整体上推动游戏的发展。

全新生成内容

在本文中,我提供给了你们使用遗传算法和明确的反馈去创造各种关卡以及更适合玩家的关卡的相关理念。

为了验证这一方法,我发行了一个基于该系统的游戏版本。一开始,概念验证拥有所有适当的基本成分;即关卡生成系统,面向玩家的评级系统以及将基于这些评价去创造全新解决方法的遗传算法。在这里最重要的问题便是这一系统是否能够创造出比生成随机结果的生成程序更有效的结果。

最后我想基于一个更广的研究范围去创造一个在线共享系统,即不仅整合区域生成内容,同时也将包含基于该方式所诞生的游戏机制。一旦完成了该系统,我们便能够看到游戏的进化方式以及与最初游戏间的区别。


看了上面的文章 热爱游戏创作的你是不是已经开始热血沸腾了呢?是不是迫不及待的想加入游戏团队成为里面的一员呢?

福利来啦~赶快加入腾讯GAD交流群,人满封群!每天分享游戏开发内部干货、教学视频、福利活动、和有相同梦想的人在一起,更有腾讯游戏专家手把手教你做游戏!

腾讯GAD游戏策划交流群486822377Gad策划交流群

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引