C#计算加电的可能性

时间:2015-12-09 19:10:37

标签: c# winforms 2d-games

我在突破游戏中有一些力量。我正在做的当前方式是生成1和1之间的随机数。 100并检查随机数:E.g

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%...

2 个答案:

答案 0 :(得分:1)

显示的代码检查您可能正在寻找的相关事件(上电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 :(得分: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
}