PROS的不妙冒险(终) 详解游戏中常用的随机机制
先说些题外话,最近面试、笔试、实习、毕设赶到了一起,笔者的生活突然被挤得满满当当……经过一番考虑,还是决定先停掉Connect上教程的更新,来面对接下来几周繁重的任务。对不起!各位读者!我写的这几篇文章与其说是教程,不如说是一些我在学习Unity的记录与感触。我热爱分享和交流,但也深知自己写文水平的不足。我希望,在我经过一段时间的积累与沉淀后,可以给大家带来更多更有趣的东西!今天来盘点几套游戏中常
·
先说些题外话,最近面试、笔试、实习、毕设赶到了一起,笔者的生活突然被挤得满满当当……经过一番考虑,还是决定先 停掉Connect上教程的更新 ,来面对接下来几周繁重的任务。对不起!各位读者!
我写的这几篇文章与其说是教程,不如说是一些我在学习Unity的记录与感触。我热爱分享和交流,但也深知自己写文水平的不足。我希望,在我经过一段时间的积累与沉淀后,可以给大家带来更多更有趣的东西!
今天来盘点几套游戏中常用的随机机制,以及实现方式。
先来科普一下,什么是“随机机制”。
真随机 :比方说现实生活中,我们掷一枚硬币,在结果产生之前,我们都知道正面朝上的概率是50%,但却都不知道结果到底是哪面朝上。就像彩票开奖之前,我们都不知道特等奖的号码一样。
伪随机 :由计算机按照一定算法,把一个种子处理成一串看似随机的数字序列。由于算法是固定的,所以只要知道了种子,那么我们就能预知它产生的随机数。
可以看到,它们的区别就在于“可预测性”。但玩家绝大多数情况下不知道种子,这时真伪随机的区别就不大了,我们可以放心的用伪随机来模拟生活中的真随机事件。
但用户究竟是人 。他们很难绕开一些心理学上的问题,会对完全随机的结果产生一些抱怨:
“不爱听的那首歌已经播放了3次,而爱听的那首一次都没有播放”
“我充值了这么多钱的号,装备居然比一个不充值的号要差”
“刚刚随机生成的地牢简直完美,可是想复盘重温一下犹如大海捞针”
“他在团战中连续暴击了4次,把我们的输出位全都秒了。一年的辛苦训练葬送给了他的好运气”
显然,这些情况的出现会对我们的产品不利。这时,我们就要给“完全随机”中加入一些 机制 ,既让随机来的公平,又让用户体验良好,心服口服。接下来笔者将会由浅入深,为大家介绍4种常见的随机机制,来应对不同情况。
1.随机打乱——难度★☆☆
网传苹果最早的音乐播放器采用了不加修饰的随机播放,随即招来了大量用户的不满与反感……可以看到,现在大多数的随机播放,都是将播放列表随机打乱后依次播放。除非你听完了列表里的所有歌,否则下一首播放的,一定是没听过的。


2.怜悯计时器——难度☆☆☆
《明日方舟》中的抽卡机制有这么一条:玩家抽中6星干员的概率为2%,如果玩家连续50次没有抽到6星干员,那么之后的每一次抽卡中,这个概率都会上涨2%,直至你抽中之后恢复2%。《炉石传说》中的新版本卡包,会让玩家在前十包中必定开出一张橙卡。诸如此类的机制我们称为“保底”。
这种保底机制实际上就是给多次失败的玩家提升成功的概率,可以看作是给“完全随机”加上了 补充条款 。例如《明日方舟》的6星干员概率是2%,但加上这条规则之后概率就高出了2%。它没有程序实现上的难度,却给玩家的心理上添加了一缕安全感。即让零充玩家的实力不会太弱,又让氪金大佬的实力可以稳步上升。
3.种子编号——难度★☆☆
有些游戏的随机关卡是可以由玩家输入种子编号来进行生成的,例如《杀戮尖塔》。我们知道,只要使用System.Random类,通过同一个种子实例化出的对象,它们产生的随机数序列是完全一样的。利用这一点,我们可以给随机的游戏加上 复盘 的功能。


4.PRD机制——难度★★★
不加修饰的随机是:每次试验,事件发生的概率都为P,那么m次试验中,事件发生的理论次数,即数学期望为m×P;
PRD机制加持后,规则变成了这样:首次试验,事件发生的概率为C,如果事件没发生,那么在下次试验中事件发生的概率增加C,以此类推,直到事件发生后,下一次试验事件发生的概率恢复到C。用公式表达即为P(N)=N×C。概率会随着失败次数的增加而增加,然后在成功之后又恢复到一个小于平均水平的值。
PRD机制不同于上述保底机制之处,在于它不仅可以保底,而且还可以减少事件连续发生的情况。最重要的是,它的数学期望与“完全随机”的m×P相等。利用这一点,我们可以逆推出概率P与概率C的联系,进而将两者互相转换。
已知C求P比较简单,我们只需用C算出PRD机制的数学期望E,那么P便是1/E: 但是从实际应用的角度出发,我们往往是策划好了概率P,需要去求PRD机制下对应的概率C。这里我们使用二分逼近法来求出近似解: 听说这个机制是《魔兽争霸III》中首次应用的。真的佩服PRD机制的发明者。 它既降低了事件连续不发生的概率,又降低了事件连续发生的概率,并且还没有改变事件发生的数学期望 。它只有一个缺陷: 由于CFromP()的计算消耗稍大,DOTA就预先算好了P与C的对应表,在游戏进行时只需查表即可得到各个概率P对应的C值。




现在我们可以意识到,游戏中很少有直接使用不加工的随机数的情境。
我这里提到的随机机制可能只是冰山一角,还有一些活动策划提出“ 弹性奖池 ”、“ 浮动概率 ”等概念来控制收益,以及通过大数据来小幅修正每位玩家的概率实现“ 捧新杀熟 ”……一个优秀的随机机制,对游戏的提升不可谓不小。
当然,我们作为玩家时,最好能以平常心对待随机机制。不要对6星干员、SSR、橙卡之类的稀有道具抱有不切实际的期望,才能获得良好的游戏体验。得之我幸,失之我命,我们玩游戏当然是为了消遣与排解,要是总抱怨的话,岂不是被游戏玩了?
好的~这就是本期的全部内容啦!如果本期内容对您有所帮助,也希望您能点赞+收藏支持我!
上期完整工程:https://github.com/MageAcademy/Mirror
更多推荐
所有评论(0)