私は "バトル"システムを持っています、攻撃者は、例えば戦闘力があります。 100の場合、防御側は例えば75.勝利の確率PHPのパーセント計算
しかし、私は今停止している、私は勝者を見つける方法を見つけることができません。 私は、攻撃者が25%の確率で敗北する可能性があることを知っていますが、私はそのスクリプトを理解できません。
アイデア?
私は "バトル"システムを持っています、攻撃者は、例えば戦闘力があります。 100の場合、防御側は例えば75.勝利の確率PHPのパーセント計算
しかし、私は今停止している、私は勝者を見つける方法を見つけることができません。 私は、攻撃者が25%の確率で敗北する可能性があることを知っていますが、私はそのスクリプトを理解できません。
アイデア?
0...100
の間の乱数を抽出するか、0...1
を好む場合は抽出します。
この数値が75より小さいかどうかチェックします。そうであれば攻撃者が勝ちます。
$p = rand(0,99);
if ($p<75)
// Attacker Won!
これは、非常に厳しい確率論的解釈を有する。 0...100
の間の数字を無作為に抽出すると、75%未満の確率で75%の確率で得られます。
この場合は、rand()
機能が必要です。 また、@Marekが示唆したことによると、攻撃者の勝利の可能性は75%よりずっと低いかもしれません。 (勝利の57%のチャンスを指すマレックの答えを読んでください)。この場合
あなたがそのようなgaussian mixtureなどのより複雑なモデルが必要になります。
問題は、あなたがより複雑な確率密度関数、例をモデル化する必要があるときに発生します。乱数ジェネレータを使用して
、次のような関数を作成することができます。そして、あなたがどこでも機能を使用することができます
function chance($percent) {
return mt_rand(0, 99) < $percent;
}
。注:mt_rand
は、より良い乱数を生成すると考えられます。
プレーヤーAがBに対して勝利する確率は、A /(A + B)です。これは任意の数と任意の尺度です。それから、実際の結果を計算するためにダイナミックの答えを使用します。ご例えば
:
$c = (75/(100+75)); // 0.42857142857142857143
$Awon = mt_rand(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を返します。あなたが必要とする値を渡してください。
http://php.net/manual/en/function.rand.phpこちらをご覧ください。 –
ちょうど好奇心から:攻撃者と防御者の両方が100のストレンシを持つ場合、どうなりますか? (または何らかの方法で禁止されていますか?) – VolkerK