Python 创建一个每分钟会损失1hp的类实例?

Python 创建一个每分钟会损失1hp的类实例?,python,class,Python,Class,我想创建几个“玩家”实例,他们将在一段时间后(例如60秒)自动失去hp。 假设我有一门课: class Player: def __init__(self, hp=1000): self.hp = hp def lose_hp(self): #not sure if there's a better way to do this than to call this function every 60 seconds pass 是否有一

我想创建几个“玩家”实例,他们将在一段时间后(例如60秒)自动失去hp。
假设我有一门课:

class Player:
    def __init__(self, hp=1000):
        self.hp = hp

    def lose_hp(self): #not sure if there's a better way to do this than to call this function every 60 seconds
        pass
    

是否有一种方法可以做到这一点,而不必为每个玩家调用
lose\u hp
功能?(如果我有10000名玩家,这可能会很困难)。

在创建对象时保存基本生命值和对象创建时间,并根据当前动态时间计算实际生命值:

import time

class Player:
    HP_LOSS_INTERVAL = 60
    HP_LOSS_PER_INTERVAL = 10

    def __init__(self, hp=1000):
        self.base_hp = hp
        self.birth_time = time.time()

    def hp(self):
        hp_loss = (time.time() - self.birth_time) // HP_LOSS_INTERVAL * HP_LOSS_PER_INTERVAL
        return max(0, self.base_hp - hp_loss)

在这里,我使用
time.time()
,可能是在一个游戏中,您希望根据游戏循环的节拍使用计时器。

记录创建实例的时间,并将其从当前时间中减去,以计算剩余的生命值。是否希望它继续损失生命值(例如,每60秒损失10生命值)还是让它失去一次生命?@MatteoItalia我需要它每隔一定的秒数继续失去生命!你能解释一下这是怎么回事吗?我有了
time.time()-self.birth\u time
的想法,但我不是每次都要调用
Player.hp()
才能更新玩家的hp吗?一旦我创建了
Player
实例,它真的是自动的吗?你不需要更新播放器的HP-你调用
HP
来了解它,它会根据当前时间计算当前的HP。这很有意义!当然非常感谢,如果你有其他影响生命的东西(例如其他玩家的伤害),你必须减少/增加
base\u HP
。此外,如果您出于某种原因需要恢复完全健康状态,您还必须重置
birth\u time
以及
base\u hp
。您根本不需要使用
del
。假设你有一个玩家列表,你可以从中删除这个实例,或者如果只有一个玩家,游戏就结束了。