赢得PHP百分比计算的机会

时间:2015-01-07 15:57:25

标签: php random probability

我有一场"战斗"系统,攻击者具有例如战斗力100,防守者具有例如75。

但我现在被困住了,我无法弄清楚如何找到胜利者。 我知道攻击者有25%的机会失去,但我无法想象这个剧本。

有什么想法吗?

4 个答案:

答案 0 :(得分:16)

0...100之间提取一个随机数,或者如果您更喜欢0...1 然后检查这个数字是否低于75.如果是,那么攻击者就赢了。

$p = rand(0,99);
if ($p<75)
  // Attacker Won!

这有一个非常明确的概率解释。如果你在0...100之间随机抽取一个数字,你有75%的可能性,这个数字将低于75.正是你需要的。

在这种情况下,您只需要rand()功能。 还要注意@Marek的建议,攻击者的获胜机会可能远低于75%。 (阅读Marek的回答,指出获胜的几率为57%)。

当您需要建模更复杂的概率密度函数时会出现问题,例如:

enter image description here

在这种情况下,您需要一个更复杂的模型,例如gaussian mixture

答案 1 :(得分:3)

玩家A对B获胜的机会是A /(A + B),这适用于任何数字和任何比例。然后使用动态的答案来计算实际结果。

对于你的例子:

$c = (75/(100+75)); // 0.42857142857142857143
$Awon = mt_rand(0, 9999) < ($c * 10000);

答案 2 :(得分:3)

如果我将其作为可用函数弹出代码:

function attack($attack, $defend)
{
    return (mt_rand(1, $attack) > $defend);
}

$attack = 100;
$defend = 75;

var_dump(attack(100,75));

根据需要简单地返回true或false。传递你需要的任何值。

答案 3 :(得分:2)

使用随机数生成器,您可以创建一个函数,例如:

function chance($percent) {
  return mt_rand(0, 99) < $percent;
}

然后你可以在任何地方使用该功能。注意:mt_rand据称可以生成更好的随机数。