2013-04-21 141 views
0

我只是寫了一條if語句來在地圖中「產生」對象,並且我在玩百分比,但我不知道我是否正確地做了這件事。這是我的:百分比案例陳述

int chance = rng_.nextInt(0, 100); 
if(chance <= 20) // 20% 
{ 
    // Spawn a chest 
} 
else if((chance > 20) && (chance <= 50)) // 30% 
{ 
    // Spawn a monster 
} 
// Otherwise don't spawn nothing 

這是一個正確的方法,或者我只是錯了嗎?

編輯:好的,我修復了代碼,現在我認爲問題已解決。

+0

你想要什麼概率? – 2013-04-21 18:55:21

+0

是的,我現在看到我錯了。這將是這樣:20% - >產生一個胸部,30% - >產生一個怪物和50% - >不產生任何東西。我的頭腦剛剛被我在前面的代碼中給出的百分比炸燬了。 Puyover 2013-04-21 18:58:17

回答

1

假設rng_.nextInt正在生成之間的數字0和100,它是一個線性分佈(0到99之間的任何數字與其他數字一樣可能),那麼0-19將是一個胸部(20%的機率),20-49將是一個怪物(30百分之幾的機會)和任何事情50和99之間(50%的機率)不會產生任何東西。因此,代碼將如下所示:

int chance = rng_.nextInt(0,100); 
if (chance < 20) 
{ 
    // spawn a chest 
} 
else if (chance < 50) 
{ 
    // spawn a monster 
} 
else 
{ 
    // Do other items if required. 
} 

所以20 + 30 + 50 = 100,其等同於0-99(100整數值)中的隨機數生成。

+0

不應該是20而是30而不是30?是的,我使用Mersenne twister來隨機生成。 – Puyover 2013-04-21 19:06:59

+1

是的。你是對的。它應該是20而不是30。打字錯誤... :(將修改與它編輯。 – Glenn 2013-04-21 19:09:15

3

沒有,因爲

30% + 70% + 30%超過100%

在你的代碼的機會 「催生一個怪物」40%70%

+0

是的!我注意到@sftrabbit評論之後。謝謝! – Puyover 2013-04-21 19:04:26