※ 引述《RSAES (RR)》之铭言:
其实推文有人提到“老板的想法”,这个在游戏界还挺常见的
尤其是博弈游戏
我举个粗略一点的例子(事实上他们用的手法精细的多)
我们假设有一个东西中奖率是1/4 但是我们不能用纯乱数
因为你用乱数表去跑
Random random = new Random();
if(random.nextInt() % 4 == 0) Jackpot();
你会发现虽然宏观来讲是极接近1/4是没错的,但是跑乱数表下去就知道
你会常常看到10个 20个没中奖的,而且并不算少见
我随手跑一个例子给你看
https://gist.github.com/Rayer/558e1e97df70d59b12d3
我随便跑一次,出来的结果是
XXXXOXXXXXXXXXXXXXXXOXOXXXOXXOXXXXOXXOXXOOXXXXXXOX
XXXXOXXXXXOXOXXXOXXOXXXXOXXXXOOOOXXXXOXXOXOXXOXXXO
O是中奖(1/4) X是没中奖(3/4)
O刚好25(中奖率1/4)次,说真的算满少见的 XD
我完全没有更改任何结果喔 纯粹是跑了两次,选一次看起来耸动点的而已
看到第六次开始那长串X吗?在游戏里面人有一种倾向就是会记忆坏运忘记好运
即使后面还有四连hit,都是没有用的,他们心里面就会认定,干,这营运奸商
这想法就是典型你提到的老板的想法
所以为了避免这种情形,我们会跑一个buffer让这种情况最多连续n次没中
而假设中奖率是1/m 那 n = 1.5*m 也就是中奖率
但是这个“必中”也不能白白送她,我们会从后面扣回来
扣回来的方法很多种,不过比较常见的就是从连续中奖下手,把本来中奖改成没中
直到把前面“本来没中,但是因为当次必中”的buffer扣光为止
这样看起来就会平均一点了(上班中 想到再补实作 实作其实满简单的)