PHP可能有机会

时间:2015-11-12 06:09:45

标签: php

好的,所以我真的不知道我是怎么回事。

我目前正在为游戏制作彩票系统。

我有一个包含虚拟物品的表格,我想通过一个可能的机会随机选择。

表格示例:

ID = 1, item_name = Sword, likely_chance = 75  
ID = 2, Item_name = 10,000, likely_chance = 20

对于id 2,10,000代表10,000个硬币。

我想提出一种算法,该算法会选择一个更有可能选择更高概率的项目,但仍然能够很少赢得可能性较低的项目。

1 个答案:

答案 0 :(得分:1)

如果您的物品有"很可能" C1C2C3 ... Cn,然后您可以计算总和Ctotal

然后,您可以获得0Ctotal之间的随机值,并遍历您的数组(顺序无关紧要),直到"跳过"项目超过此随机值。

例如,在您的情况下,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会记住最后一次输出,并且每次都不会再次运行此程序。输出看起来是一样的,但不是。

相关问题