Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
赢得PHP百分比计算的机会_Php_Random_Probability - Fatal编程技术网

赢得PHP百分比计算的机会

赢得PHP百分比计算的机会,php,random,probability,Php,Random,Probability,我有一个“战斗”系统,攻击者的战斗力为100,防御者的战斗力为75 但我现在陷入困境,我不知道如何找到获胜者。 我知道攻击者有25%的几率会失败,但我无法理解脚本 有什么想法吗?提取一个介于0…100之间的随机数,或者如果您喜欢0…1 然后检查此数字是否低于75。如果是这样,攻击者就赢了 $p = rand(0,99); if ($p<75) // Attacker Won! $p=rand(0,99); 如果($p使用随机数生成器,则可以创建如下函数: function chanc

我有一个“战斗”系统,攻击者的战斗力为100,防御者的战斗力为75

但我现在陷入困境,我不知道如何找到获胜者。 我知道攻击者有25%的几率会失败,但我无法理解脚本


有什么想法吗?

提取一个介于
0…100
之间的随机数,或者如果您喜欢
0…1

然后检查此数字是否低于75。如果是这样,攻击者就赢了

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

如果($p使用随机数生成器,则可以创建如下函数:

function chance($percent) {
  return mt_rand(0, 99) < $percent;
}
功能机会($percent){
返回mt_rand(0,99)<$percent;
}

然后您可以在任何地方使用该函数。注意:
mt_rand
据说可以生成更好的随机数。

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

例如:

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

如果我要将此作为可用函数弹出到代码中:

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

$attack = 100;
$defend = 75;

var_dump(attack(100,75));

只需根据需要返回true或false。传入您需要的任何值。

可能会对您有所帮助。只是出于好奇:如果攻击者和防御者的强度都为100,会发生什么?(或者以某种方式禁止这样做?)当然,我想的方法很复杂,但很简单。做得好,谢谢!你应该检查一下@Marek的答案。在这里,较弱的防守队员有75%的获胜机会。这绝对是错误的。当然我有反向进攻/防守队员,修正了即使你换了他们,数字(25%对75%)是错误的。我已经编辑警告OP,他可能使用了错误的相对百分比,仍然是宣布胜利者持有的方法。就数学而言,这似乎是唯一正确的答案。这不对,玩家a有75%的胜率和100/(100+75)=0.57,或57%。@Styphon,这是75分,不是百分之。游戏中的总分是175分,玩家A占75分。@Marek,根据OP,没有A占100分,B占75分。@jeroen你假设OP是以获胜百分比为基础的,总共有两个用户可用分。虽然我同意,这可能是事实OP最初的意图和要求,现在是他要求的。从OP最初的声明中我们所知道的是,A有25%的机会失败。