案例陈述百分比

时间:2013-04-21 18:54:10

标签: c++ percentage

我只是在地图中为“生成”对象写了一个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

这是正确的做法还是我错了?

编辑:好的,我修复了代码,现在我认为这个问题已经解决了。

2 个答案:

答案 0 :(得分:3)

不,因为

30% + 70% + 30%超过100%

在您的代码中“产生怪物”的可能性为40%而不是70%

答案 1 :(得分: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个整数值)。