2015-01-07 16 views
7

私は "バトル"システムを持っています、攻撃者は、例えば戦闘力があります。 100の場合、防御側は例えば75.勝利の確率PHPのパーセント計算

しかし、私は今停止している、私は勝者を見つける方法を見つけることができません。 私は、攻撃者が25%の確率で敗北する可能性があることを知っていますが、私はそのスクリプトを理解できません。

アイデア?

+0

http://php.net/manual/en/function.rand.phpこちらをご覧ください。 –

+0

ちょうど好奇心から:攻撃者と防御者の両方が100のストレンシを持つ場合、どうなりますか? (または何らかの方法で禁止されていますか?) – VolkerK

答えて

15

0...100の間の乱数を抽出するか、0...1を好む場合は抽出します。
この数値が75より小さいかどうかチェックします。そうであれば攻撃者が勝ちます。

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

これは、非常に厳しい確率論的解釈を有する。 0...100の間の数字を無作為に抽出すると、75%未満の確率で75%の確率で得られます。

この場合は、rand()機能が必要です。 また、@Marekが示唆したことによると、攻撃者の勝利の可能性は75%よりずっと低いかもしれません。 (勝利の57%のチャンスを指すマレックの答えを読んでください)。この場合

enter image description here

あなたがそのようなgaussian mixtureなどのより複雑なモデルが必要になります。

問題は、あなたがより複雑な確率密度関数、例をモデル化する必要があるときに発生します。乱数ジェネレータを使用して

+0

もちろん、私は複雑にする方法を考えていましたが、それはとても簡単です。素晴らしい仕事、ありがとう! – Sims

+0

ああ、私にそれを打つ。 –

+0

@マレクの答えをチェックしてください。ここで弱いディフェンダーは勝利の確率は75%です。それは間違っている。 – jeroen

1

、次のような関数を作成することができます。そして、あなたがどこでも機能を使用することができます

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

。注:mt_randは、より良い乱数を生成すると考えられます。

3

プレーヤーAがBに対して勝利する確率は、A /(A + B)です。これは任意の数と任意の尺度です。それから、実際の結果を計算するためにダイナミックの答えを使用します。ご例えば

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

これは数学のところで唯一の正解と思われる。 – jeroen

+1

これは正しくありません。プレーヤーAは勝利の確率は75%、100 /(100 + 75)= 0.57、つまり57%です。 – Styphon

+0

@Styphonそれは75ポイントであり、パーセントではありません。試合の合計得点は175、プレーヤーAの合計得点は75です。 – Marek

3

私は、使用可能な関数としてコードにこれをポップした場合:必要に応じて

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

$attack = 100; 
$defend = 75; 

var_dump(attack(100,75)); 

は単にtrueまたはfalseを返します。あなたが必要とする値を渡してください。