策划解读:关于“暴击”的误解与数值的“伪随机”

作者:Sithferia 2019-12-24
本文来自知乎网友Sithferia关于话题“在游戏中暴击率90,十次攻击会暴击九次吗,如果80暴击率的对手反而十次全部暴击,暴击率的意义是什么?”的回答。
https://www.zhihu.com/question/359672217/answer/929611536


在数学上90%几率是指无限多次的实验尝试中,单次独立事件发生率为90%。

在游戏里玩家会有另一层理解(错误的常识):在有限多次的尝试中,事件总发生率为90%,也就是说10次里一定要接近9次发生。

对于那些对数理逻辑不敏感的人士,会天然的将概率这种概念,在有限次实验内感性的放大。

但有意思的是,游戏数值设计者在大多数游戏(赌博游戏等真随机游戏除外)的设计过程中,并没有视图纠正玩家的理解错误,反而去迎合了这种理解错误。

也就是说,游戏数值中的概率,大多数是反真实概率的,目的是为了让玩家认为自己感知的就是正确的。在某种意义上这确实是件吊柜的事情,但在游戏设计理论里,这是一种正常现象。

游戏体验必须以玩家为准,如果以数学家为准,很多反直觉毁三观的真实理论反而会影响游戏体验(毕竟玩游戏不是搞理论学术,重点是开心,让玩家进入心流状态)。

所以说,游戏数值设计者在大多数游戏里做的概率设计是伪随机

比如20%的暴击率,理论上讲每一次攻击触发暴击都是固定的几率20%,每一次攻击的暴击率是独立且固定的,并不受攻击次数和之前攻击效果的影响。

但由于玩家存在另一种理解,他们期待5次攻击必定出现1次暴击,更宽泛的一点说,玩家会认为在3~7(一般4~6为佳)次的过程中必定会发生一次暴击。对于数值设计者而言,并不希望玩家能够在20%的暴击率下,获得较高概率的连续两次暴击,同时也不希望出现连续10次不发生暴击的情况。这种问题在传统固定概率的情况下较难得到解决。

对于固定的概率,定义P(K)为前K-1次未发生暴击,第K次发生暴击的概率,则P(K=N)为:


这是一个单调递减函数,随着N的不断扩大,P不断减小,在有限次操作的状态下,玩家对于20%容易缺少一个较为准确的感知。为了增强这种感知,可以让P在K=5附近拥有较大的概率,在其他情况下拥有较小的概率。


从第5次开始有意让玩家加强概率感知

下图更直观的展示了这种差别。


那么伪随机具体怎么设计呢?涉及到利益相关内容,仅搬运网上关于dota剑圣暴击率伪随机分析的文章作为案例。

设定初始的概率为P,定义随机种子C为一个常数。对于剑圣暴击率,设P=20%,C=5.57%。

1. 进行第一次攻击,暴击概率为C。如果未暴击,进入流程2;如果暴击,返回流程1进行下次暴击计算。

2. 进行第二次攻击,暴击率为2C。如果未暴击,进入流程3;如果暴击,返回流程1进行下次暴击计算。

3.进行第三次攻击,暴击率为3C。如果未暴击,进入流程4;如果暴击,返回流程1进行下次暴击计算。

......

17. 进行第十七次攻击,暴击率为17C。如果未暴击,进入流程18;如果暴击,返回流程1进行下次暴击计算。

18. 本次攻击必暴击。返回1进行下次暴击计算。

也就是说,如果一个英雄始终不暴击,那么他的暴击概率将会是:C,2C,3C,4C,...,NC。

当N足够大时,NC会大于等于1,所以一定会发生暴击。实际上,英雄攻击的暴击概率始终在若干个不同暴率的状态中切换。

但是,当这种攻击进行次数很多以后,此英雄的平均暴击概率会趋近于20%

下面的表格是从网上搜索到的WAR3关于游戏显示概率P、随机种子C、暴击前攻击的最大次数maxN,实际统计概率Pcount的数据。


在实际使用过程中,我们关注如何通过P值求得C值。P和C的函数关系为单调函数,可使用最小二分法:

首先定义一些参数,C1,C2,C3,eps,初始化C1=0,C2=1,暴击率精度eps=0.01%,预设暴击率为Ps。

1.令C3=(C1+C2)/2

2.计算C3的实际Pa。如果Pa与Ps差值的绝对值小于eps,则结束计算,C3即为所需要的种子;如果Pa与Ps差值大于eps,进入流程3。

3.如果Pa<Ps,则C1=C3;如果Pa>Ps,则C2=C3。返回流程1。

通过有限次的迭代,我们就可以获得随机种子C。

通过以上的伪随机机制,有利于游戏中概率事件的稳定。对于暴击事件来说,伪随机机制降低了连续暴击或者连续不暴击的的概率,这些都是玩家想要的。

题外话:

在现代手机游戏中的gacha设计里,例如常见的十连抽,这种过程也是伪随机过程的一种。这种十连抽必中的策略,保证了玩家拥有较为平稳的体验,也有利于游戏体验节奏的把控。

作者:Sithferia

最新评论
暂无评论
参与评论

商务合作 查看更多

编辑推荐 查看更多