原标题:玄不救非,氪不改命 如何分清游戏中的“真随机”和“伪随机”?

一定不是我非,一定是游戏有问题

很久以前流传着这样一则笑话:一个身患重病的人决定去动手术。在手术之前,他问医生:“这起手术的成功率是多少?”医生回答他:“只有1%。”他很惊慌,但是医生说:“没事的,在你之前我已经治死过99个人了。”

这是一则嘲笑那些不懂“概率”的人的笑话,却讲出了“真随机”和“伪随机”之间的区别。

在四月末的时候,我曾写过一篇《你打游戏靠的是技术,还是运气?》,其中就提及了“伪随机”这个概念。当时受限于篇幅,没有详细展开解释“伪随机”的概念。前不久,在因国际邀请赛而备受关注的Dota2在最近一次的更新中,有这么一条更新内容:“落空的负面效果和下坡攻击的落空效果现在都采用伪随机触发”。

那么到底什么是“伪随机”呢?以及和“伪随机”对应的“真随机”又是什么概念?

在讨论真随机和伪随机之前,先排除另一个容易搞混的错误答案:赝随机数。

赝随机数算法(Pseudo-Random Number Generator,简称PRNG)是计算机的一个术语——当然,它也可以被叫做“伪随机数算法”,只是为了方便与游戏中的“伪随机数”进行区分,本文中统一称作“赝随机数算法”。众所周知,计算机程序是由无数“0”和“1”两种状态构成的,如果一个状态不是“0”,那就必定是“1”,颇有种非黑即白的味道。

因此,在计算机程序中,不存在“不确定”的数字,只有确定的“1”和“0”。基于这种特性,计算机无法生成“真正的(不确定的)随机数”。那么在计算机中,需要生成或是使用到随机数的时候怎么办呢?通常是利用计算机抓取一些数值,然后将这些数值输入至一个复杂算法(常用的算法是同余法和梅森旋转算法,有兴趣的读者可以自行查询,这里就不展开讲了)当中,通过一系列运算得出一个数字,这就是平常说的赝随机数了。

只要最初输入的数值(初值)不变,那么输出的值都会是同一个值,这就证明了这个数并不随机,只是看起来随机而已。换句话说,只要这个随机数是由确定算法生成的,那就是赝随机数。所以下一次在和朋友聊天时提到真随机数、伪随机数时,如果有人插嘴:“计算机只能生成伪随机数,所以根本没有什么真随机”,那你就可以霸气侧漏地说他是“云玩家”了。

回到正题。在游戏当中我们一直提到的“真随机”和“伪随机”,到底是什么意思?

我们通常说的真随机又名“纯随机”(True Random Distribution),就是我们平常一直说的那种、一般意义上的“随机”。在真随机中,每一个事件都是相互独立、服从真随机分布的,不受其他事件的发生而改变。比方说某款游戏为了吸引用户,拥有这么一个随机抽卡系统:每次抽卡时,都有1%的几率抽出SSR卡片,这个概率服从真随机分布。

回到我们最开始说的那个“治死99个”的笑话:我们一眼就能看出这个笑话的不合理性。但在抽卡游戏中,我们的大脑瞬间失去理智。有相当一部分玩家认为:我连抽100次,总能抽到这张卡吧!

实际上,连抽100次却抽不出1%的SSR卡的几率是为(1-0.01)^100=36.6%,甚至还稍稍超过了1/3。将连抽数字上升至300,也仍有4.9%的几率。换句话说,假设有10000个玩家连抽100次,就有约3660个玩家抽不出这张SSR;10000个玩家连抽300次,也仍有约490个玩家抽不出这张SSR——这对玩家的游戏体验来说可以说是毁灭性的打击。

尽管纯随机在数学上是无罪的,在代码中更是明明白白、清清楚楚,但玩家抽不出卡可不会回想到初高中的数学课本,而是首先怀疑几率是否被策划运营篡改、这背后又是否有肮脏的PY交易……

当然不仅仅是在抽卡系统当中如此。在一些竞技性比较强的游戏中(比如《War3》、《Dota2》之中——《英雄联盟》几乎完全摘除了随机系统,不在此列),连续数次的“走运”极大影响游戏的竞技性和观赏性。

比方说《Dota中》最著名的概率英雄虚空假面的技能“回到过去”:使虚空假面有25%几率完全躲避一次伤害。受限于War3引擎,这个技能采用的是真随机概率,在某个极端情况下(通常见于精彩集锦中),虚空假面能够保持很低的血量承受多次伤害却不死、最终反杀对手。这种带给敌方极差游戏体验的系统,因此也进入了设计师们“整治范围”之中。

为了避免极差的游戏体验带来的玩家数量流失,设计者们提出了“伪随机”的概念:在不确定性的随机事件当中,通过一系列算法使随机事件均匀分布在多次事件当中,尽可能减少或消除极端情况的发生,以提高玩家的游戏体验。

在设计师们的努力下,“伪随机”应运而生,这里的伪随机就和上文的赝随机数算法(PRNG)意义不同了。

制造“伪随机”的方法有很多,在《War3》、《Dota2》这类游戏当中普遍使用的是“伪随机分布”(Pseudo Random Distribution,简称PRD)处理概率。

就拿《Dota2》中最强大的暴击技能“恩赐解脱”来举例:幻影刺客有15%的几率造成200%/325%/450%致命一击伤害。在PRD机制下,幻影刺客的攻击实际上并不是每一刀都有15%的暴击率。

根据PRD机制的公式P(N)=N*C可得出15%几率的C值为3.22%,即幻影刺客的第一次攻击暴击概率为3.22%;如果第一刀没有暴击,则第二刀的暴击率提升至2倍,即6.44%;如果仍旧没有暴击,则提升至3倍的9.66%,以此类推。

如果继续推算,可得在第32刀时暴击几率会达到100%,最可能触发暴击的次数是第6刀,平均触发刀数是6.67刀等等……

同样,在连续触发暴击时,下一刀的暴击几率会减少。RPD机制使竞技游戏中连续触发或不触发技能的几率降低,避免了运气成分过度干扰战斗结果,大幅提升了玩家的游戏体验,但不影响这些随机事件的正反馈:TI6决赛的“打我五下晕三下”,可是令全球人民集体沸腾了呢!

除了伪随机分布RPD之外,还有两种常见的伪随机:洗牌算法和组合随机。洗牌算法最常见的用法,是在各大音乐播放器中的“随机播放”之中。在随机播放时,如果采用真随机,会导致一首歌无论如何都播放不出,或是同一首歌连续播放数次(有兴趣的读者可以计算一下这些概率)。为了解决这个问题,播放器采用的解决方案即是洗牌算法:将一个包含所有歌曲的数组像洗牌一样打乱,然后依次播放这个乱序数组。

至于组合随机,这是一种广泛应用于各个游戏的做法:在抽奖的时候进行两次、或是更多次的判断,一次不随机,而剩下的判断则是真随机。比如说,你会在第X次抽卡时抽到SSR是确定的,但抽中的SSR具体是哪张卡,则是随机的——这就是广大手游中的“低保”系统了。

在一堆数据之中想要分清“真随机”和“伪随机”似乎并不是那么容易。那么接下来为大家介绍两个例子,有助于更好理解什么是“真随机”和“伪随机”:

真随机:有一天,小明在的班级上举办了一次抽奖活动。这个班级有40个学生,所以为了公平起见,保证每个学生都有1/40的几率中奖,老师准备了40个相同的纸盒,每个纸盒中都有40张纸条,有1张纸条是中奖纸条。这样一来,每个学生都有1/40的几率中奖,但每个学生是否中奖并不受其他学生的影响。在极端情况下,这个班上可能40个学生都能中奖。这就是真随机。

伪随机:小明班上举办了抽奖活动。为了公平起见,老师准备了1个纸盒,纸盒中有40张纸条,只有1张纸条是中奖纸条。这样一来,每个学生都有1/40的几率中奖——但是显而易见,这个班上有且仅有一名学生能够中奖。一名学生在中奖后,余下的所有学生中奖几率都会减少至0。这就是伪随机。返回搜狐,查看更多

责任编辑:

计算机01无法纯随机,玄不救非,氪不改命 如何分清游戏中的“真随机”和“伪随机”?...相关推荐

  1. 用计算机打童年,童年向, 看看我们当初在电脑课玩的那些小游戏, 中枪的大多是90后...

    原标题:童年向, 看看我们当初在电脑课玩的那些小游戏, 中枪的大多是90后 童年向,看看我们当初在电脑课玩的那些小游戏,中枪的大多是90后 还记得小时候玩电脑的时候,没有英雄联盟,没有绝地求生,没有穿 ...

  2. 深度分析游戏中的随机概率

    这段时间公司开发的游戏上线测试,许多玩家在抽卡时抱怨脸黑,很难抽到所需要的卡牌,而又有一部分玩家反应运气好能连着抽到紫卡,检查了下随机相关逻辑代码,并没有找出问题所在,玩家运气好与坏只是觉得真有可能是 ...

  3. 伪随机函数 密码学_密码学与理论2:什么是伪随机

    伪随机函数 密码学 正如本系列第一部分所得出的结论,没有随机性的安全性是不可能的. 确定性密码无法抵御强大的攻击者, 真正的随机数生成器不切实际或难以获得,因此加密技术基于伪随机数生成器. 这篇文章的 ...

  4. 密码学与理论2:什么是伪随机

    正如本系列第一部分所得出的结论,没有随机性的安全性是不可能的. 确定性密码无法抵御强大的攻击者, 真正的随机数生成器不切实际或难以获得,因此加密技术基于伪随机数生成器. 这篇文章的前两章定义它们是什么 ...

  5. 魔百盒CM211-2 ZG(朝哥代工)无WIFI版线刷救砖包(当贝桌面)

    魔百盒CM211-2 ZG(朝哥代工)无WIFI版线刷救砖包(当贝桌面) 固件说明: 该固件system分区判断是用201-2的分区修改而来的,解决了精简系统.刷机救砖等一系列问题,虽然算不上完美,但 ...

  6. 有关计算机代码的游戏,七灯游戏是一款经典的益智类游戏。游戏中,有七盏灯排成一圈,如图a所示,初始时灯的开关状态随机生成,操作其中某一盏灯,则可以切换该灯的“开/关”状态,同时,这盏灯-组卷网...

    七灯游戏是一款经典的益智类游戏.游戏中,有七盏灯排成一圈,如图a所示,初始时灯的开关状态随机生成,操作其中某一盏灯,则可以切换该灯的"开/关"状态,同时,这盏灯对面的两盏灯也会切换 ...

  7. 计算机游戏中屏幕上显示的,电脑在玩全屏游戏的时候显示屏老是出现无信号

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:电脑在玩全屏游戏的时候显示屏老是出现无信号 问题详情:我在玩CF的时候 每次进入游戏 显示屏突然出现无信号 好几次了推荐回答:这样的 ...

  8. 在JavaScript中生成特定范围内的随机整数?

    如何可以生成两个指定的变量之间的随机整数在JavaScript中,例如x = 4和y = 8将输出任何的4, 5, 6, 7, 8 ? #1楼 对于具有范围的随机整数,请尝试: function ra ...

  9. 众妙之门玄之又玄,游戏系统中的伪随机(Pseudo-Randomization)和真随机(True-Randomization)算法实现Python3

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_212 有人说,如果一个人相信运气,那么他一定参透了人生.想象一下,如果你在某款moba游戏中,在装备平平,队友天坑的情况下,却刀刀 ...

最新文章

  1. 如何使用Python和Tkinter构建Toy Markdown编辑器
  2. 同步和异步的区别和联系以及一般在什么情况下使用它们
  3. 操作系统内存管理_操作系统6内存管理基础
  4. java 快排和堆排序
  5. 从Image Caption Generation理解深度学习
  6. ptr = (char *)malloc(0)
  7. Centos7安装Python3.6
  8. 2020数字中国创新大赛-智能算法赛-冠军方案分享
  9. android传输注册数据异常,android数据传值再获取的问题
  10. Win10 Terminal + WSL 2 安装配置指南,精致开发体验
  11. kali linux虚拟机密码,[Linux]安装kali虚拟机后忘记root密码
  12. C语言 文件缓冲区
  13. vue 切换页面没有改变滚动条_Web前端高级Vue学习笔记(三)
  14. web前端期末大作业 基于HTML+CSS家乡主题毕业设计源码 (1)
  15. AD5933的直流偏置和量程自动切换问题
  16. MVP模式在项目中的使用
  17. Python简单99例-训练每天
  18. css ms是什么意思,CSS 3中-webkit-, -moz-, -o-, -ms-这些私有前缀的含义和兼容
  19. 计算机网络-自顶向下方法-笔记【第2章-应用层】
  20. 基于FPGA的图像平滑处理

热门文章

  1. 【开源项目】电视盒子好用又强大的APP: TVRemoteIME
  2. Win10的用户账户设置怎么取消?
  3. 腾讯云Intel Xeon Cascade Lake 8255C(2.5 GHz)处理器性能评测
  4. 计算机网络设备的运行温度,什么是机房温度、湿度标准?
  5. 电脑英语--著名软件篇
  6. Lua IDE - x-studio 强大的IDE
  7. python+selenium+chrome实现淘宝购物车秒杀自动结算
  8. iOS程序员面试笔试宝典整理
  9. 8-数据可视化-地图可视化
  10. 用户画像打标签之RFM客户价值分析