python - 如何让一个数字在一定百分比的时间内随机出现 - 重复出现?

标签 python python-3.x random

我正在制作一款想要波动伤害的游戏。有两个敌人。对于敌人来说,他们会失去一定的生命值(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/

相关文章:

python - 计算python中范围内列表中的 float 数量

python - 敌人不会显示

Java keytool/用java生成 key 的安全性(一般)

android - 在 SQLite 中获取随机记录

python - 如何从字符串中加入()单词?

python - 为什么 Django 称我的 datetimes 天真而他们不是?

python - 在djangorest框架中使用postman上传图像时出错

python - 将 excel 文件从 S3 读取到 Pandas DataFrame 中

python-3.x - 具有零填充格式的 python datetime strptime 的意外行为

ios - random() 会改变吗?