2015-01-07 15 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 के रूप में एक और अधिक जटिल मॉडल की आवश्यकता होगी।

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

तो फिर तुम समारोह कहीं भी उपयोग कर सकते हैं:

+0

बेशक, मैं जटिल होने का तरीका सोच रहा था, लेकिन यह इतना आसान है। महान काम, धन्यवाद! – Sims

+0

आह, मुझे इसे हराया। –

+0

आपको @ मरेक के उत्तर की जांच करनी चाहिए। यहां एक कमजोर डिफेंडर को जीतने का 75% मौका है। यह निश्चित रूप से गलत है। – jeroen

1

एक यादृच्छिक संख्या जनरेटर का उपयोग करना, आप इस तरह के रूप में एक समारोह बना सकते हैं। नोट: mt_rand माना जाता है कि बेहतर यादृच्छिक संख्याएं उत्पन्न होती हैं।

3

बी के खिलाफ खिलाड़ी ए जीतने का मौका ए/(ए + बी) है, यह किसी भी संख्या और किसी भी पैमाने के लिए है। फिर वास्तविक परिणाम की गणना करने के लिए गतिशील के उत्तर का उपयोग करें।

अपने उदाहरण के लिए:

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

गणित के संबंध में यह एकमात्र सही उत्तर प्रतीत होता है। – jeroen

+1

यह सही नहीं है, प्लेयर ए के पास जीतने का 75% मौका है और 100/(100 + 75) = 0.57, या 57% है। – Styphon

+0

@ स्टाफ़ोन यह 75 अंक है, न कि पर्सेंट। खेल में कुल अंक 175 है, खिलाड़ी ए में कुल 75 है। – Marek

3

अगर मैं एक प्रयोग करने योग्य समारोह के रूप में कोड में इस पॉप थे:

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

$attack = 100; 
$defend = 75; 

var_dump(attack(100,75)); 

बस सही या गलत वापसी करेंगे के रूप में की आवश्यकता है। आपको जो भी मूल्य चाहिए उसे पास करें।

संबंधित मुद्दे