繁体   English   中英

C#计算上电的机会

[英]C# Calculate chance of power up

我的突破游戏增强了力量。 我当前的操作方式是生成一个介于1和100之间的随机数,并检查该随机数:例如

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到8之间的情况下,才会发生20%的机会,依此类推

我考虑过这样做:

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

但我不确定这是否真的是20%...

所示代码检查了可能是您正在寻找的相关事件(启动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,为true。

对于百分比的东西,我更喜欢使用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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM