我在突破游戏中有一些力量。我正在做的当前方式是生成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%...
答案 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
}