每当遇到这种倒霉的“随机事件”,总能让人
每当遇到这种倒霉的“随机事件”,总能让人顿足捶胸:这哪里是什么技术游戏?分明就是辣鸡游戏,全靠运气!
其实不管是现实生活还是游戏世界,都存在各种各样的“随机事件”。中彩票有概率、掉橙卡有概率、女朋友无缘无故生气也有概率。
但两者又有些不同。女朋友生气大多数时候是看心情的,难以预测;而游戏世界里的大多数“随机事件”都有一个“剧本”。
也就是说,你今天开的蓝天白云、打怪爆的什么装备,其实系统早就给你安排得明明白白了。这些所谓的“随机事件”其实不是真随机,而是按照代码来实现的“伪随机”。
那问题来了,什么是“伪随机”?
01 伪随机
大家可以简单理解为,能用算法生成近似于随机结果的尝试,叫伪随机。(此处的算法一般指梅森旋转算法,这里不展开)
举个通俗易懂的梨子,音乐app的随机播放就是典型一个的伪随机。
今天我想在咪咕上随机播放3首歌。系统会根据算法,随机给我生成一个播放列表。如果是真的随机,我会听到重复播放的歌曲。比方说我听完《Love Story》下一首还是《Love Story》的概率是33.3%。
然而事实却是,随机播放的歌基本不会重复。所以当这个歌单播放了2首歌之后,我是能准确预测第3首歌的。
这种“部分可预测性”是伪随机的最大特征之一。
而真正的随机事件,是相互独立的,它不受其他事件的发生而影响。它不会因为你播放了这首歌,而影响下一首歌的播放。每一个结果都不可预测(最多有概率)。
那为什么要用这样的“伪随机”来营造一种“随机”的感觉呢?
说出来你可能不信,选用“伪随机”是为了照顾玩家(用户)的体验,让玩家(用户)感到更“随机”。
02 游戏中的伪随机
游戏中也存在各种各样的随机事件。
就以文章前面说到的明日方舟为例。游戏中最优质的卡牌——六星干员爆率是2%,这个概率虽然看着通俗易懂,但很多人其实是有认知盲区的。
不少玩家将它简单地理解为“开50包必有1张六星”,但其实开50包至少有1张六星的概率只有1-(1-0.02)^50=63.58%,剩下36.42%的人即使开满50包,他们连见六星影子的机会都没有。
就算是把开包的次数增加到100次和150次,依然会有13%和5%玩家开不到六星。在真实的随机事件下,这些情况下是客观存在的。
但对玩家来说,他们很难意识到这点。看着自己充了足够多的钱,却享受不到良好的游戏体验,他们会迁怒于游戏的运营和策划,骂游戏作假、策划暗改数值。
为了避免这种情况的发生,大多数集卡式游戏的抽卡系统都有一个叫Pity Timer(怜悯计时器)的保底机制。
还是以明日方舟为例。前50次不出六星的话,从第51次开始每次抽取就增加2%的六星爆率。就算是“非酋”,最多也会在第99次时抽到1张六星。
这种模式,有点类似war3的伪随机机制:PRD机制(英文全称Pseudo Random Distribution)。
其实现在很多竞技游戏中的伪随机机制,都是从war3演化而来的。就拿文章开头的暴击率为例。
DOTA2中的主宰(剑圣)有一个技能叫“剑舞”,满级时能提供35%的暴击率。
如果按照真实随机来计算的话,连续打出2次暴击的概率是12.25%。
过高的暴击概率或许是观众的一发兴奋剂,但对严谨的竞技赛事来说,这无疑是砒霜。因为一次人品爆发秒掉对方核心,可能毁掉一个职业战队1年的努力。
为此,在不调整概率的情况下,V社学习了war3的机制,修改了相关的算法。目前DOTA2中所有的暴击、闪避、击晕、格挡效果都遵循PRD机制。
所谓的PRD机制可以用一个公式概括:
P(N)=C×N
其中,C是一个小于1的常数(算法复杂,但有现成的数值表),P(N)是事件第N次尝试时的概率。公式所表达的意思是,从事件发生起,每次不成功的尝试都会增加1个固定值;成功后概率重新计算。
这么说可能有点云里雾里,我用实际情况表达一次大家可能就理解了。
主宰的暴击率是35%。但第一次攻击时,它的实际暴击率(C值)只有16%。此后每次不暴击的攻击都会使暴击率提升16%。一直到第7下时暴击率为112%(理论上的数值),这意味着必出暴击。
DOTA2 WIKI提供的数据
换句话说那就是,35%的暴击率=攻击7下至少出1次暴击。将新机制代入计算后,你会发现,35%暴击率连续触发暴击的概率仅有2.56%。相比之前,下降了近10%。
这样的计算方式降低了小概率事件的连续触发,大大降低了运气对比赛结果的影响;同时也规避了连续不触发的情况,保证了玩家的游戏体验。
除了DOTA2以外,LOL的暴击率也是采用了类似PRD的伪随机机制。
早在2011年的一次美服更新里,就有写道这么一句话:
(参考译文)我们已经改变了暴击和闪避的计算方式。你现在会有更少的“幸运”或“不幸运”的场景,你不会有连续的暴击或闪避,也不会被连续暴击或闪避。你的平均暴击率和以前一样,如果你有50%的暴击率,你攻击100次仍然会暴击50次。
这样的机制一方面在保护玩家的体验,另一方面又让结果倾向“随机”。除此之外,我们还能从这个机制“预测并掌握”一些信息。
比方说蛮王的被动技能“战斗狂怒”会提供最高50%的暴击率。它的起始C值约为30%(参考DOTA2的C值)。如果连续3次平A都不出暴的话,那么第4次是必然出暴的。
因此实战的时候,当你发现自己A了小兵3下都没出暴击的话,那么第4下可以果断选择A对方的英雄了。
当然竞技游戏里还是有少部分设定是“真随机”,比方说DOTA2蓝胖的多重施法,是欧皇还是非酋全看脸。
03 计算机与伪随机
每次在提到游戏伪随机这个话题的时候,总离不开一句“至理名言”:计算机只能生成伪随机。
事实上,当68年前第一台商用计算机Ferranti Mark 1问世后,“计算机科学之父”阿兰·图灵就设计出了一个真随机数发生器(True Random Number Generators,简称TRNG)。
它的原理是根据系统内的电器噪声,生成一个20比特的随机数字串。经过近半个世纪的发展,TRNG的技术才真正成熟。现在的TRNG已经可以通过采集环境中的空调声、雷暴声、女朋友撒娇等声音来生成随机数了。
在这其中有一个比较知名的真随机数网站:RANDOM.ORG。如果大家需要一些随机数,可以去尝试一下(不用梯子)。
随机数可视化后的图像,孰真孰伪很明显
因此准确来说应该是:计算机可以生成真随机但程序不能。
那既然有TRNG,为什么还有那么多游戏用程序生成伪随机呢?
这里主要是成本和效率的问题。TRNG的调试、维护成本都很高,而且效率低下。中国一个大型网游几十万人同时抽卡的运算量,TRNG可能都应付不过来;作为对比,伪随机程序可以轻松搞掂上千万的运算量。
再加上现在的伪随机数程序,已经快做到“以假乱真”的程度了。在诸多现实因素的综合考量下,用伪随机数的app、游戏才会越来越多。
所以啊,别去迷信那些所谓的“抽卡玄学”了。程序早就给你安排得明明白白了。
参考资料:
1、NGA:wjndante的“概率与随机”三部曲之其一——如何用计算机生成“真随机”
2、DOTA2 WIKI、炉石传说WIKI
3、random.org网站上Dr。 Mads Haahr的文章
后记
1、关于音乐app的随机播放,最开始iTunes用的确实是真随机。但后面有用户投诉说,怎么老是听到重复的歌?你这是真的随机吗?你耍我呢??
苹果公司有苦说不出,最后把“真随机”改成了”伪随机”。改完之后,苹果用户纷纷点赞。我佛了。
2、PRD机制中的C值计算是一个比较复杂的过程,有兴趣的玩家可以去DOTA2 WIKI页了解一下。另外因LOL没有公开相关的C值,因此文中相关的讨论参考了DOTA2中的数值,如果不太准确,还请大家见谅。
3、DOTA2的暴击、闪避、格挡等机制一开始采用的是真随机的算法,但玩家试玩后表示并不习惯,后来V社还是沿用了先前war3的PRD机制,并做了改进。
不得不说,war3真是一款伟大的游戏。那时的暴雪拥有一群富有灵性、眼光卓绝的游戏天才,真是当之无愧的游戏梦工厂。
来源:游民星空
新浪声明:新浪网登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
文章转载自新浪新闻