LOL、DOTA抽奖、暴击的触发真的随机吗?

1程序里面的随机数

1.1 伪随机

首先,程序的一大特征就是,在输入和代码逻辑不变的情况下,输出也不会发生变化。所以任何依赖于特定算法加上种子生成的随机数,都是可预测和可复现的。这些随机数只是在分布上接近随机,但实际上在哪个位置出现哪个数在程序运行起来的一刻就确定了。

比如以下代码编译后重复运行总是会产生相同的结果(不同的实现随机值会不一样,但重复运行的结果一定是一样的):

1215069295

1311962008

1086128678

#include <iostream>
#include <cstdlib>
 
int main() {
    using namespace std;
    srand(0);
    cout << rand() << endl;
    cout << rand() << endl;
    cout << rand() << endl;
}

为了避免总是产生相同的结果,一般做法是把时间戳作为种子值:

//把上面的srand(0)替换成下面这样
srand(time(nullptr));

但这种解决不了根本问题,因为其实是可以通过大量的实验来推测出种子,进而控制随机性的。比如就有人破解了minecraft的随机附魔,来实现定向附魔

1.2 真随机

真随机就是指无法人为控制和预测的随机值。所以随机的来源一般是大自然,比如 https://www.random.org/ 提供的随机数就来自于大气噪音。 https://qrng.anu.edu.au/ 这里提供的随机数来自于量子波动。

如果一个抽奖(比如彩票)要证明没有幕后黑手,那就只能使用真随机数。

1.3 改进的伪随机

一般操作系统也会提供生成随机数的功能,比如linux提供了通过搜集硬件数据(鼠标/键盘事件、温度传感器等)来生成随机数的方式(/dev/random) https://wiki.archlinux.org/index.php/Random_number_generation

由于这些硬件设备较多,并且一般无法预测,所以安全性相对较高。

在运行一些对随机性要求较高的程序时(比如openssl genrsa),有时候会看到一些让你动动鼠标、乱敲一下键盘的提示,目的就是为了提高随机性。

2 游戏里的随机

游戏里有很多地方设计到随机,比如

  • 触发某个技能可能有特定的概率(dota之类)
  • 游戏里可能会定期产生一些随机事件
  • 抽卡有一定概率获得高级别的英雄、皮肤(炉石之类)
  • 官方搞得一些充值活动,抽奖概率获得xxx
    这些随机大部分都是看起来随机,实际上都是经过精心策划的,在随机性上做了手脚,抽奖概率并没有发生变化,但已经不再是完全随机。

从而让一些看起来很玄学的抽奖技巧其实是有科学依据的,比如 http://www.eeyy.com/shouyou/yys/2017012057318.html 这里边提到的:

  • 凌晨抽卡
  • 不要连续抽卡
  • 跟抽
    甚至还能够在游戏时利用这些技巧,提高技能触发概率。

2.1 独立随机

独立随机就是利用上面说的伪随机,每次都是用伪随机来判断执行什么样的动作。

魔兽争霸的录像文件就利用了这个机制:

《魔兽争霸》的录像,为什么长达半小时的录像大小只有几百 KB?

录像文件有三个主要内容:

随机种子数
基本信息(玩家、地图)
操作序列
在我们玩war3的时候,地图初始化会产生一个随机种子,这个种子的作用是用来计算游戏中的随机数(例如AI行动,单位攻击造成的伤害)。
接着,我们每一次的点击、按键操作都会被序列化记录下来。这里记录有分成三种:

时间X,玩家X对单位X执行命令(无目标,无点)
时间X,玩家X对单位X对单位Y执行命令
时间X,玩家X对单位X对点X执行命令


作者:知乎用户
链接:https://www.zhihu.com/question/25431134/answer/30861068

从用户角度来看,其实这种随机就是他们眼中的真随机,没有任何暗箱操作。

但是这种形式有一个严重的问题,就是部分运气比较差的玩家,体验感会非常差。

假如某个抽奖活动的中奖概率为50%,理论上连接5次不触发的概率只有1/32=0.03125,是一个非常小的值。但是如果有100w人参加了这个活动,连抽5次啥也没有的人会非常多(100*0.03=3w),他们会觉得这个抽奖是在骗他们,就会产生这个局面:

  • 运气较差的这3w人疯狂发帖吐槽
  • 运气一般的人会给吐槽的人点赞
  • 运气较好的人幸灾乐祸,什么也不说
  • 本来要抽奖的人看到这些吐槽,不去抽奖了
    假如某个暴击技能的触发概率是50%,2个有同样技能的玩家互A3次,其中一个玩家连接暴击3次,另一个玩家一个暴击也没有的概率是1/64=0.015,平均没100次就有1.5次会出现。这回影响竞技类游戏(dota)的公平性。

所以就诞生了保底机制,保底机制就是如果用户n次没有触发,下一次必定触发。但粗暴的加一个保底会导致概率发生变化,因此就有了PRD机制。

2.2 PRD机制

PRD是一种随着为中奖次数的增加,中奖概率会不断上涨的机制。

比如第1次中奖概率为25%,如果没有中奖,第二次中奖概率变成50%,如果还没有中奖,第3次概率变成75%,如果这一次也没中,第4次概率变成100%,也就是必中。一旦用户中奖,概率恢复到25%。

如果某个技能的概率是50%,那么在dota里第1次触发的概率其实不是50%,而是30%,第2次是30%2,第3次是30%3,第4次是30%*4>1,所以第4次必中。

这样用户在第n次触发的概率分别是:

  • 第1次: 0.3

  • 第2次:(1-0.3)*0.6 = 0.42

  • 第3次:(1-0.3)(1-0.6)0.9 = 0.25

  • 第4次:1-0.3-0.42-0.25 = 0.03

平均中奖次数:0.31+0.422+0.253+0.034 = 2.01, 中奖概率 1/2.01 = 50%

所以可以看到通过使用PRD,整体的中奖概率仍然是50%,但是保证了用户连续4次,至少会有一次会中,避免了极端情况出现。

dota(英雄联盟)里使用的就是这种机制: https://liquipedia.net/dota2/Pseudo_Random_Distribution

王者荣耀不确定: https://bbs.nga.cn/read.php?tid=18479920

在游戏时其实可以利用PRD机制:

  • 1、先打小兵,如果发现2次没有触发暴击,停手

  • 2、去打对方英雄,这是暴击的概率已经不是技能表里的50%了,而是90%,几乎必中
    一些游戏里强化/合成装备、抽卡也会使用这种机制,这样就可以:

  • 先强化/合成垃圾装备,如果2次失败,停手

  • 换成想要强化/合成的装备,几乎必定成功

现在有政策要求所有的游戏内抽奖都必须公布概率,拿到概率后旧可以对照上表来搞了。

2.3 老虎机

b站有一个视频:

【游戏灯塔】UP主用氪金500万的经验来告诉大家游戏抽奖背后的秘密与逻辑! https://www.bilibili.com/video/BV1HJ411q7Ye?from=search&seid=15473182918558298670 (10:40开始)

里面提到街厅里面的老虎机其实概率是可以调整的,并且是先吞掉一定的钱,才会吐出来其中一部分,保证老板永远不亏。所以有经验的人发现某台机器中奖后就会换台机器。

一些游戏抽奖也是同样的套路,比如每抽100次就吐出一个1个奖品,第100、200、300个抽奖的用户锁定中奖(第1-99个用户,跟上面的小兵和垃圾装备,有个专业代称:垫子),其他都不中奖。由于用户不知道自己是第几个,所以每个用户中奖的概率是一样的。

但这种其实是存在漏洞的。

一般某个用户中奖后会全服广播,可以通过观察2次中奖的平均间隔,在间隔接近时参与抽奖,这时中奖的概率就会大幅提升,成为垫子的概率就大大减小。

2.4 定时放号

假如游戏厂商决定要通过活动在某1天放100件高级装备, 一件不多放,一件不少放。

由于活动参与人数是未知的,所以事先无法确定概率,概率调大了,几分钟就抽光了,概率调小了,奖品抽不完。

一般会把100件装备分到24小时内,每小时在某个固定的时间(一般是整点)以较高的概率放几件。抢完后这个时段内其他人的中奖概率就成了0。

所以凌晨抽奖、整点抽奖也是很科学的。

3 参考链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352