我说我为什么抽不到 SSR,原来是这段代码在作祟
在游戏开发的过程中,很多场景都会用到加权随机。例如游戏中的抽奖,我们有 50% 的几率获得金币、40% 的几率获得钻石、9% 的几率获得普通装备,1% 的几率获得极品装备。
什么是加权随机?当我们从某种容器中随机选择一个元素,每个元素被选中的机会并不相等,而是由相对“权重”(或概率)被选中的,也就是说我们想要有“偏心”的得到某种随机结果。举一个例子,假如现在有一个权重数组 w = {1, 2, 4, 8},它们代表如下规则。
$\frac{1}{(1+2+4+8)} = \frac{1}{15} \approx 6.6$ % 的机会选中索引 0
$\frac{2}{(1+2+4+8)} = \frac{2}{15} \approx 13.3$ % 的机会选中索引 1
$\frac{3}{(1+2+4+8)} = \frac{4}{15} \approx 26.6$ % 的机会选中索引 2
$\frac{8}{(1+2+4+8)} = \frac{8}{15} \approx 53.3$ % 的机会选中索引 3
解决方案
方案一、笨笨的办法
第一个方法是在我们的候选列表中,包含了基于权重的每个索引的预期数量,然后从该列表中随机选择。
假设现在有权重列表 {1, 2, 4, 8},那我们得到的候选列表将是 {0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3}。
然后通过 rand.Intn() ,获取一个随机数,就完成了,代码如下。