2014-01-23 58 views
0

我的谷歌鏈接都是紫色的,從我搜索過的多少鏈接中找到這個答案,並且我嘗試了很多不同的建議,我開始感到沮喪,來直接堆棧。我正在嘗試給英雄發起的攻擊增加重要的機會,所以或多或少我只是想弄清楚如何計算出現事件的機會。這是現在我的代碼塊:計算戰鬥系統的致命機率

public void attack(){ 
    enemydmg = hero.att - enemy.def; 
    herodmg = enemy.att - hero.def; 
    enemy.hp -= enemydmg; 
    hero.hp -= herodmg; 

    if(Math.random() < hero.critchnc){ 
     enemydmg = enemydmg * 2; 
    } 
} 

我擡起頭來如何應對百分比爲好,這是我覺得我需要去的路上,我只是不知道它是如何工作或如何執行它。任何幫助都會很棒。提前致謝。

+0

如果'hero.critchnc'是0-100之間的整數,@christopher有一個很好的解決方案。如果它是一個浮點/雙精度值,你應該能夠相應地調整他的答案。關鍵要注意的是,Math.random()會產生0-1之間的十進制值。 – csmckelvey

回答

1

如果你想要一個百分比,那麼Math.random()產生01之間的數字。你所需要做的就是將它乘以100,並將其轉換爲int來獲得你的百分比。

int percentage = ((int)(Math.random() * 100)); 

這將在您的變量percentage產生099之間的值。

Here's a link到工作碼,其產生隨機10百分比。

+0

好吧,這工作。我一開始就遇到了一個問題,它只是一遍又一遍地重複同樣的機會,每次都會導致關鍵的成功,直到我重置,反之亦然,直到重置才成功,所以將它整合到工作代碼所示的方法中而不是在我的課堂上把它作爲一個常量。我感謝您的幫助! – Kristaphonie

+1

同樣在我的'if'聲明中,我甚至可以在整個遊戲中保持'hero.critchnc'的可擴展性。 – Kristaphonie

0

hero.critchnc在0和1之間的floatting數(0沒有機會的關鍵,1總是至關重要的),那麼你必須:

if(Math.random() >= (1 - hero.critchnc)) 
{ 
    // Critical hit 
} 
0

你真正需要的是有作爲發生的機率隨機值英雄暴擊機率,例如如果一個英雄有17%的暴擊機率並且你有一個隨機函數可以給你一百個值之一,那麼這17個值(以任何方式選擇)實際上應該會發生一次暴擊如果所有一百個數值都具有相同的機會發生)將其翻譯爲代碼:

我們將u se Random.nextInt(99);這應該給我們一百(幾乎均勻分佈)值。如果英雄暴擊機率表示爲0到100之間的整數(例如17),那麼nextInt的返回值是0-16之間的數字的概率實際上是17%,所以我們可以用這樣的代碼表示:

rand = Random.nextInt(99); 
    if(rand <= critchance - 1){ 
     //we have a crit 
    }