程序员技术干货程序猿阵线联盟-汇总各类技术干货

『伪随机』伪随机的概念

2017-11-20  本文已影响313人  dejunz

之前一直听说过“计算机里没有真正的随机”这句话。,最近玩游戏时,突然很好奇游戏中的“抽卡”“暴击率”等随机事件,是如何实现的。

计算机里的确的确没有“真随机”,因为计算机是由0和1组成,不存在不确定的因素。但是程序经常会用到随机的功能,因此出现了“伪随机”,这是相对“真随机”的一个概念。

“真随机”就是我们现实世界中的随机,每次发生都是独立事件,概率不会相互影响。
比如一件事发生的概率是20%,不管是否发生,那么下次再发生的概率依然是20%。

随机数生成器是一个函数y=f(x),而随机种子则是变量x。所以一旦x和f(x)确定了,那么产生的随机数y也就确定。
“伪随机”正是通过,在随机数生成器中传入的随机种子得到结果产生随机数。之所以为“伪随机”,是因为能够出现的结果以及次序其实已经在随机数生成器这个函数中确定了,如果f(x)一定,而程序通过输入x的变化,而产生不同结果,达到随机的效果。“伪”指的是有规律,而不是“假”。
比如3次输入的x值相同,那么得到的3次结果也将相同。但是如果将当前时间节点(时钟)当做输入x,x则必然不同,则达到了随机的效果。

  1. 游戏暴击率

在游戏中,经常有"暴击率"的游戏设定,但是出现连续暴击而改变战局对于电子竞技游戏来说并不是好事,因此经典游戏war3,dota就对暴击率进行了干涉,首先设定一个暴击率初始值x%,之后进行正常判定,如果未发生暴击,则通过算法,提高x%的值。那么下次暴击率就会提高。如此循环,直到出现暴击,然后重置暴击率为初始x%。
虽然过程并不独立,但平均总体算下来,是符合该角色暴击率的。

  1. 游戏抽卡

在游戏中,经常有抽卡玩法,比如YYS,FGO,王者荣耀等。
假如SSR出率为1%,那么1个玩家抽100次没有SSR的概率是99%,那么100个玩家各抽100次,0.99^100=0.366,将近37%的人没有SSR。这就非常影响游戏体验了,超过1/3的玩家都没有获得强力卡牌。这会导致这部分玩家一气之下卸载游戏甚至在网络上攻击游戏,对游戏厂商非常不利。为了避免这种情况,很多游戏推出了保底机制,比如当你前99次都没有抽到某爆率1%角色时,第100次必定会出,这就是保底机制。

  1. 音乐随机播放

现在的音乐播放器都有“随机播放”功能,这个功能的实现并不是在你的歌单中随机抽取歌曲播放,而是将你歌单中的歌曲重新打乱排序生成一个新歌单(用户看不到),再顺序播放这个生成的歌单。
所以即使你使用随机播放,当你从固定的歌曲选择“上一首”时,每次都是同一首歌。


文章内容为个人理解,如有错误欢迎指出。

邮箱:CodingDjz@126.com

上一篇下一篇

猜你喜欢

热点阅读