均匀随机掉落算法
游戏设计中真随机掉落的体验其实是很好不好的,加入触发概率是1%,100次中,一次都不触发的概率是
0.99^100 = 0.366032341273229
0.99^300 = 0.049040894071286
也就说有36.6%概率1次都不触发,300次中有4.9%的概率1次都触发。当出现这种事情的时候还是很难受的。
常规的保底算法是累计100次数不中后直接送一个,为了避免保底导致整体触发概率高于1%,又会对后掉落的结果进行调整。
另外一种处理方式是一次不中就提高下次的命中概率,运气好的还是会很早出,治标不治本。
我的解决方法是,用均匀随机数,确保100次内必出。
先产生0~99共100个数,构成一个数组,然后打乱它们顺序,产生一个随机数序列。
32,12,4,99,33,90,44,40,20,69,81.......
每次判断是否掉落时,取出数组中的最后一个元素(最后一个取的快),如果这个数是0,则说触发掉落,否则不触发掉落。当这个数组中空了,就重新生成一个序列。
公式化表达就是:如果触发概率是a分之b的话,则生成一个b个元素的[0,b)的不重复的整数随机序列,每次序列中取一个元素,如果值小于a,则触发。
缺点是随机序列要占内存。序列越长,保底体验越差(比如这个例子,如果用1000长度是序列,还是可能几百次都不中)。