1

我在我的游戏中实现了一个加电功能,我希望它在杀死僵尸时有 10% 的机会应用到玩家身上。每次玩家子弹击中僵尸时,我都尝试使用此代码,但它并没有真正起作用。

double rand = Math.random() * 10 + 1;
if(rand == 1){
    power.setShrink(true);
}

我知道加电是有效的,因为如果我将它设置在 if 语句之外,播放器就会缩小。

我将如何做到这一点,以便在僵尸被杀死时有 10% 的几率应用玩家?

4

3 回答 3

2

双精度数是浮点数。在您的情况下,它可以是从 1 到 11 的任何数字,最高可达 53 位二进制精度。所以它不仅可以是 1,还可以是 1.01、1.02 等。因此,它恰好是 1 的几率可以忽略不计。

Random.nextInt生成随机整数时最好。

Random r = new Random(); //only do this once

if(r.nextInt(10) == 0){
    power.setShrink(true);
}
于 2013-04-28T12:55:47.573 回答
1

您可以使用简单的蒙特卡洛选择:

if(Math.random() > 0.9){
   power.setShrink(true);
}

这使您有 10 个随机机会触发加电。

于 2013-04-28T12:53:29.470 回答
0

您可以Random.nextInt(10)在类似的逻辑中使用。

您当前的代码失败了,因为您double很少会完全正确1

于 2013-04-28T12:54:26.617 回答