好的,所以我真的不知道我是怎么回事。
我目前正在为游戏制作彩票系统。
我有一个包含虚拟物品的表格,我想通过一个可能的机会随机选择。
表格示例:
ID = 1, item_name = Sword, likely_chance = 75
ID = 2, Item_name = 10,000, likely_chance = 20
对于id 2,10,000代表10,000个硬币。
我想提出一种算法,该算法会选择一个更有可能选择更高概率的项目,但仍然能够很少赢得可能性较低的项目。
答案 0 :(得分:1)
如果您的物品有"很可能" C1
,C2
,C3
... Cn
,然后您可以计算总和Ctotal
。
然后,您可以获得0
和Ctotal
之间的随机值,并遍历您的数组(顺序无关紧要),直到"跳过"项目超过此随机值。
例如,在您的情况下,Ctotal = 75 + 20 = 95
。得到0到95之间的随机数,如果小于75,则给一把剑;否则 - 给10000个硬币。根据您可能的机会,它将提供公平的奖金分配 - 分别为78.95%和21.05%。
$items = ['Sword', '10000 coins'];
$chances = [70, 25];
$ctotal = array_sum($chances); echo "Total is $ctotal\n";
$rand = rand(0, $ctotal); echo "Rand is $rand\n";
$i = 0;
$currentSum = 0;
while (true)
{
$currentSum += $chances[$i];
if ($currentSum >= $rand)
{
echo "You win: ".$items[$i];
break;
}
$i++;
}
这是working Demo。请注意,IDEOne会记住最后一次输出,并且每次都不会再次运行此程序。输出看起来是一样的,但不是。