我怎样才能使一个数字在一定的时间内重复随机出现?

2024-10-02 10:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个游戏,我想要波动的伤害。有两个敌人。对于敌人1,他们会损失一定数量的生命值(5点)。对于敌人2,玩家有可能在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)

碎片损坏在另一个文件中单独定义为:

CONSTANT = [5, 5, 5, 5, 5]
RAND = [3, 3, 3, 3, 10]
SHARD_DAMAGE1 = choice(CONSTANT)
SHARD_DAMAGE2 = choice(RAND)

在这两个文件的最上面,我有:from random import uniform, choice。你知道吗

就像我说的,游戏将锁定在3或10,并使伤害,直到整个事情重新开始。即使我有5个随机数,它也只会选择一个,直到我重新开始。你知道吗


Tags: selffalse游戏时间玩家pgshardchoice
2条回答

这是因为当一个变量被分配了一个随机数时,程序只引用了这个存储的值,这个值已经被选取了一次。当做出选择时,比如:

SHARD_DAMAGE1 = choice(CONSTANT)

存储在SHARD_DAMAGE1中的值永远不会被重新分配,因为SHARD_DAMAGE1 = choice(CONSTANT)在开始时只读取一次。你知道吗

正如评论中所建议的,每次需要点击时,你都需要做出一个随机的选择,比如:

hit.health -= choice(CONSTANT)

以这种方式进行,每次命中都将执行一个新的计算。你知道吗

我不认为有任何必要持有一个预先定义的数字列表。你知道吗

写一个考虑敌人类型的小函数。然后对于“其他”类型,根据20%/80%分割的伤害计算:

def getDamage( enemy_type ):
    if ( enemy_type == enemy.TYPE_ONE ):
        damage = DAMAGE_NORMAL #5
    elif ( enemy_type == enemy.TYPE_TWO ):
        if ( random.randint( 1, 100 ) > 80 ):  # Critical hit?
            damage = DAMAGE_LARGE  #10
        else:
            damage = DAMAGE_SMALL  #3
    else:
        # random damage
        damage = random.randint( 1, 5 )
    return damage

相关问题 更多 >

    热门问题