我正在制作一款想要波动伤害的游戏。有两个敌人。对于敌人来说,他们会失去一定的生命值(5 点)。对于敌人二,玩家有可能在 80% 的情况下造成少量伤害(3 点),在 20% 的情况下造成大量伤害(10 点)。
我尝试使用一组数字中的选择,但我发现它会选择其中一个随机数字(例如 3),并坚持使用它直到游戏重新启动。我希望每次玩家攻击时伤害数字都会改变,使其看起来更像“-3、-3、-3、-10、-3”。
在主循环中我有:
hits = pg.sprite.groupcollide(self.enemy1s, self.shards, False, True)
for hit in hits:
hit.health -= SHARD_DAMAGE1
hit.vel = vec(0, 0)
hits = pg.sprite.groupcollide(self.enemy2s, self.shards, False, True)
for hit in hits:
hit.health -= SHARD_DAMAGE1
hit.vel = vec(0, 0)
SHARD_DAMAGE 在另一个文件中单独定义为:
CONSTANT = [5, 5, 5, 5, 5]
RAND = [3, 3, 3, 3, 10]
SHARD_DAMAGE1 = choice(CONSTANT)
SHARD_DAMAGE2 = choice(RAND)
在两个文件的最顶部,我有:来自随机导入统一,选择
。
就像我说的,游戏将锁定 3 或 10 并造成伤害,直到整个事情重新开始。即使我有 5 个随机数,它也只会选择一个,直到我重新启动为止。
最佳答案
发生这种情况是因为当为变量分配随机数时,程序仅引用已选取一次的存储值。当做出选择时,如下所示:
SHARD_DAMAGE1 = choice(CONSTANT)
存储在 SHARD_DAMAGE1
中的值永远不会被重新分配,因为 SHARD_DAMAGE1 = choice(CONSTANT)
在开始时只读取一次。
正如评论中所建议的,每次需要点击时,您都需要进行随机选择,如下所示:
hit.health -= choice(CONSTANT)
按照这种方式进行,每次命中时都会执行新的计算。
关于python - 如何让一个数字在一定百分比的时间内随机出现 - 重复出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57487376/