最近做的一个游戏,策划提供了敌人移动速度的一个随机范围值,比如240—300,然后用随机数在这个范围内取一个值,但是策划发现经常敌人速度变化不是很大,这个嘛~
通常来说我们取随机值都是用的这种类似算法:
public static randomNumber(max: number, min: number): number {
return Math.round(Math.random() * (min - max) + max);
}
乍一看好像没啥问题~
但是我们试试随机1-10,10000次的情况下每一个数分别会出现几次。
let arr = [];
for (let i = 0; i < 10000; i++) {
let num = this.getRandomNumber(10, 0);
// cc.log(num);
let index = num;
!arr[index] ? arr[index] = 0 : "";
arr[index]++;
}
cc.log(arr);
结果是第一个和最后一个明显比其他概率低很多。
其实我一直知道js随机数会出现不均匀的现象。主要表现为中间的概率更高,头和尾的概率更低。(原因可能是Math.random()函数对于随机出0和1的概率是相当的低)~以前做随机道具的时候