有这样的代码。
(int Chance, ThingType prize)[] chances =
{
(Chance: 50, prize: ThingType.Keg),
(Chance: 50, prize: ThingType.Health),
};
int chance = Random.Range(0, 100) + 1;
for (int index = 0; index < chances.Length; index++)
{
var pair = chances[index];
if (chance <= pair.Chance)
return pair.prize;
}
return ThingType.Chest;
它允许您根据所有概率加起来为 100 的事实来选择随机奖品。
但是,如果在这个元组数组中存在具有相同机会的事物,那么列表中的第一个将被淘汰——在这种情况下它ThingType.Keg
永远不会——列表中的第二个,即ThingType.Keg
如何编写才能成功处理具有相等和不等概率的元组数组?嗯,即 预计会有这样的事情
在入口
(int Chance, ThingType prize)[] chances =
{
(Chance: 70, prize: ThingType.Gold)
(Chance: 30, prize: ThingType.Kind),
(Chance: 50, prize: ThingType.Keg),
(Chance: 50, prize: ThingType.Health),
};
在出口处 - 有 35% 的机会返回ThingType.Gold
,有 15% 的机会返回ThingType.Kind
,有 25% 的机会返回ThingType.Keg
,有 25% 的机会返回ThingType.Health
但有一件事必须确定返回
不,他没有。