0

我只是在写一个 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

这是一个正确的方法还是我错了?

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

4

2 回答 2

3

没有为什么

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

在您的代码中,“生成怪物”的机会40%不是70%

于 2013-04-21T19:02:01.683 回答
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 个整数值)。

于 2013-04-21T19:05:02.577 回答