查看原文
其他

程序丨以《Pokemon Go》为例,探索游戏中的抽取算法

2017-11-22 崔嘉艺 Gad-腾讯游戏开发者平台

译者:崔嘉艺(milan21)

审校:王磊(未来的未来)


抽取算法


通常在设计游戏的时候,我们需要设计一个抽取算法,或者设计一种从池子里随机给玩家游戏物体的方法。在实践中很难看出这些随机分布具体是一个什么情况,很难设计好它们。所以在这篇文章中,我将介绍一些小的模拟来帮助理解各种算法。


目录

l  基本的玩家参与

n  模拟

n  关于本文所做的简化

l  基本的系统

l  抽取系统

n  简单的模拟

n  PokemonGo

l  介绍新的内容

l  各种抽取算法

n  确定性

n  保底系统

n  口袋妖怪的红色和蓝色

l  结论


基本的玩家参与度


模拟


这是我们的第一个模拟,它很简单。只需点击interact! 按钮,就会给玩家一个游戏的碎片。不同的玩家需要不同的参与度。 如果玩家感受到的参与度太少,他们就会离开。


这是一个关于玩家如何在游戏中获取东西非常抽象的表示。不过,你可以想象,如果这是PokemonGo的话,每次按下交互按钮的话,玩家都会得到一个新的口袋妖怪。



关于本文所做的简化


这是对玩家体验的一个显而易见的简化。然而,如果我们把它看作是抽取系统单轴上的体验,并且是对这个体验的高度抽象,我们仍然可以从这些模拟中获得价值。还有值得记住的一点是,这个模拟中的新功能可以做得很好,但是由于这篇文章没有涵盖的内容,这里的功能对于游戏来说还是不够好的,比如说会对游戏中的决策造成不利影响,或者增加复杂度。视频游戏很复杂,需要从多个角度来观察。


基本系统


常见的游戏开发模式是使用一个系统来驱动玩家的参与度,而不是以上述模拟的方式。手工制作一个完整的掉落模式通常是耗时和昂贵的。 所以,通过这个模拟,我们将要为自己打造一个基本的系统。


在这个模拟中一共有三个滑块可以控制:


• 抽取率:玩家获得新游戏碎片的频率。

• 新奇的要求:玩家需要获得新的东西。


观察:


你可以看到,在这个模拟中,你能够快速地达到几乎稳定的状态,那些想要比系统所能提供的更多参与度的玩家会离开,而其余的玩家会继续坚持。


抽取系统


简单的模拟


我们现在要对以前的模拟添加一些细节,使其更接近真正的抽取系统。


这个作品的动力来自于观看Pokemon Go将第二代宠物小精灵放在野外,所以我们将使用该游戏作为其余部分的主要例证。特别是,我们将看看玩家随机遇到新宠物小精灵的方式,并考虑用一个抽取系统来实现。


我们将从最抽象的表示开始,我们假设所有的碎片都具有相同的价值,我们将假设它们一共有100个。


观察:


n  将抽取率设置为与上一图中相同的值,并将重复碎片的值设为0会导致图形趋向于0,因为玩家获得的游戏碎片越来越多,因此不太可能体验到获得一个新的游戏碎片的感觉。


n  如果我们将获得新物品的值设置为等于获得重复物品的值,那么我们可以简单地重现上一个图。


n  当重复碎片的值仍然为0的时候,将掉落率提高到超过某一点,会出现玩家快速收集完所有的碎片,然后快速离开的情况。


n  提高重复碎片的值对图形尾部的大小有很大的影响。


n  对于100个游戏碎片的情况,并且针对平均时间最高进行优化,玩家平均能得到大约77个独特的游戏碎片。


可能的改进:


l  计算抽取的潜在价值 - 当玩家有可以让他们兴奋的东西的时候,他们对获得这些东西的机会自然就会更为激动。然而,这对于模拟来说太复杂了,所以这些效果的计算会作为读者的练习。但是,这种兴奋是玩家体验的主要部分,在设计自己的系统的时候,你应该牢记这一点。


l  不均匀的抽取率- 在现实世界中,抽取率可以像你想要的那样复杂。但在这里,我会把它作为一个稳定流,只是为了保持模拟的简单。


Pokemon Go



让我们深入了解下一个真正的抽取系统是什么样子的。以Pokemon Go为例,不同的口袋妖怪有不同的价值,由于以下的原因:


l  内在价值 - 口袋妖怪对玩家来说,除了游戏性之外,还有其它价值。喜欢小狗的人可能会喜欢Growlithes,无论它的数值如何。


l  之前没有抓到过这个口袋妖怪 - 这是一个收集游戏,你想抓住全部的口袋妖怪,所以得到一个你以前没有抓住的口袋妖怪自然将是大多数玩家的主要动力。


l  进化 - 与前一种相似,但是强度可能较低。能够将一个碎片转换成你尚未获得的物品对玩家来说是有价值的。


l  战斗价值 - 获得比你已经拥有的能力更强的口袋妖怪或能够为队伍的主要成员加油的口袋妖怪对玩家来说是有价值的。


我们不会模拟所有这些,只是会比上面的模拟更接近这里的内容。请注意,在这个抽象层次上,这个数据可以代表很多游戏,而不仅仅是Pokemon Go。 为了做到这一点,我:


l  把所有的卡都放在一个罕见的层次上,并给它们一个新的值和旧的值,基于一些随机的噪音。


l  将碎片的数量设置为150。


观察:


l  很自然的,当重复值非零但小于新值的时候,这些图显然非常类似于以前的图。

介绍的新内容


Pokemon Go在推出第二代的时候,只是在现有的抽取系统中添加了更多的东西。当你的玩家已经执行了大量的抽取的时候,会有如下图所示的图形。


观察:


·    为了比较,你可以将上述图形之一设置为相同的参数,以便可以看到只让玩家抽取新物品的时候你的参与度曲线是什么样子的。当然,这并不实用,因为你的玩家想要获得他们全部,但是值得注意的是,这种抽取算法的图形是有多么的糟糕。


·    确保你的重复碎片持有的值在这里有很大的不同。


各种抽取算法


到目前为止,我们只使用简单,高度随机的抽取算法。 在本节中,我们来看一下其他的一些抽取算法。


确定性


如果每个元素一个接一个的抽取出来的话,那么这个图表在这种微不足道的情况下是什么样的?


请注意,对于玩家来说,随机抽取和确定性抽取的感觉非常不同。其中一个原因是能够计算出玩家想要某件东西所需的努力。虽然这些模拟没有办法建模。他们只能告诉你玩家得到了什么。


观察:


·  与简单模拟相比,最佳抽取率要低得多。 这也导致平均时间较短。

·  让所有玩家都能轻松获得所有的碎片。


保底系统


平滑抽取系统方差的一个常见方法是对设置一个下限。这样会产生如下图形:


观察:


·  图在这里下降得更为显着。


·  很容易参与,让所有玩家都能获得所有物品。


·  最佳平均时间与简单模拟的平均时间非常接近,但是方差要小得多。所有的玩家都有非常相似的体验,导致他们得到所有的碎片,然后离开。


·  所以,虽然所有的玩家都接近平均水平,但是没有玩家花费比平均水平多的多的时间。


·  这里的最佳抽取率比简单模拟的最佳抽取率要低。


从我个人的观点来看,我不喜欢游戏做到了这一点,而不向玩家明确的告知,因为我觉得它会加强赌徒的错觉。我也觉得让底更加明确是一个更好的体验,因为如果这个信息是隐含的,玩家不会觉得那些得到差结果的抽取会帮助他们得到好结果的抽取。


口袋妖怪的红色和蓝色


另一个选择是将你的池子划分成很多较小的池子,然后让玩家在他们之间移动。 这本质上就是PokemonRed做的事情,还有“Heroes Charge”等游戏所做的事情。这会使流程变得更加流畅,因此图形更像是这样:


当然,实施这样一个方案的方法有很多,所需的工作量取决于你想做的分离类型。


观察:


·  这里的最佳平均时间远远高于任何其他模拟的最佳平均时间。


·  最佳抽取率低于任何其他模拟的最佳抽取率,但仅略低于上限。


·  再次,玩家在最佳情况下,最终会得到所有的碎片。


结论


这当然是一个非常不完整的分类法。 但是,希望你可以考虑玩家如何与你所做的抽取系统进行互动,以及这些解决方案的潜在问题和好处。


你可以在这里查看源代码 - https://github.com/nikwin/pullArticle。

如果你对这篇文章有任何的反馈意见,或者如果你想查看更多这样的内容,可以在Twitter上@murthynikhil与我联系。 如果你做了任何类似这样的新模拟,请告诉我。我很想看到更多像这样的解释。


【版权声明】

原文作者未做权利声明,视为共享知识产权进入公共领域,自动获得授权。


----------------------

今日推荐


计算机图形学:逆向运动学综述

ET开源服务器框架跨平台部署Centos7

腾讯技术专家答疑专场:游戏中的人工智能


添加小编微信,可享双重福利

1.加入GAD程序猿交流基地

获取行业干货资讯,观看大牛分享直播

2.领取60G独家程序资料,地址在小编朋友圈

包括腾讯内部分享、文章教程、视频教程等全套资料

↓长按添加小编GAD苏苏↓

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存