2015-12-09 66 views
0

我的突破遊戲中有一些動力。我做它目前的方式產生1 & 100之間的隨機數,並檢查隨機數:如C#計算加電的機會

if (powerUpCheck <= 5 && ball.CanCollide && !paddle.IncreaseBatWidth && !explodingBall) 
{ 
    lblPowerUp.Visible = true; 
    lblPowerUp.Text = "Power Ball!"; 
    ball.CanCollide = false; 
    enablePowerUp = true; 
} 

if (powerUpCheck <= 7 && !explodingBall && !paddle.IncreaseBatWidth && ball.CanCollide) 
{ 
    lblPowerUp.Visible = true; 
    lblPowerUp.Text = "Exploding Ball!"; 
    enablePowerUp = true; 
    explodingBall = true; 
} 

if (powerUpCheck <= 20 && !paddle.IncreaseBatWidth && ball.CanCollide && !explodingBall) 
{ 
    lblPowerUp.Visible = true; 
    lblPowerUp.Text = "Bigger Bat!"; 
    enablePowerUp = true; 
    paddle.IncreaseBatWidth = true; 
} 

正如所知道的,20%的機會,如果是20和8之間,一個只會發生,等

我想過做這樣的:

if(powerUpCheck >= 20 && powerUpCheck <= 20) 

但我不知道這是真正的20%......

+1

如果數字是5或更少,那麼每個if語句都會執行 - 是你想要的嗎?在第二個例子中,只有數字爲20時,if纔會執行,並且if(powerUpCheck == 20)'會更簡單。 – Tim

+2

如果你問一個直接的問題,它將幫助我們所有人... –

+0

'if(powerUpCheck> = 20 && powerUpCheck <= 20)'只有當'powerUpCheck == 20'時才能工作,因爲它不能同時大於大於和小於20. –

回答

1

代碼所示檢查˚F或依賴事件,這可能是你正在尋找的東西(獲得20%的啓動時間,25%得到另一個,可能是改進版本)。

通常這樣的事件將是獨立的,你只是要檢查是否有新Random數下降尤其範圍:

// somewhere in class 
static Random powerupRandom = new Random(); 

var usePowerUp1 = powerupRandom.Next(100) < 5; //(0-4 out of 0-99 - 5%) 
var usePowerUp2 = powerupRandom.Next(100) < 7;  
var usePowerUp3 = powerupRandom.Next(100) < 20; 

請注意,如果您使用<=比你的百分比會有所不同:randomValue <= 5會有6%的機率 - 在0-99中0-5爲真。

1

對於百分比的東西,我更喜歡使用Random.NextDouble(),它返回一個介於0(含)和1(不含)之間的值[0,1)
它不是一個很大的改變,但你可以更精確,你不必隨時改變隨機數的值(比如從100到1000)。

var powerUpCheck = random.NextDouble(); 

//5% 
if (powerUpCheck < 0.05) 
{ 
    //Do stuff 
} 

//7% 
if (powerUpCheck < 0.07) 
{ 
    //Do stuff 
} 

//20% 
if (powerUpCheck < 0.20) 
{ 
    //Do stuff 
} 

//1 3rd 
if (powerUpCheck < 1.0/3) 
{ 
    //Do stuff 
}