You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python OOP示例中如何同步更新所有攻击玩家的伤害分配值

问题原因

现有逻辑在每次添加新攻击玩家时,仅会给当前新加入的玩家赋值当下计算出的伤害值,早已加入的玩家存储的还是旧计算结果,不会随玩家数量变化自动更新,因此只有最后加入的玩家能拿到正确数值。

修复方法

不要给龙单独记录攻击玩家的计数,直接维护攻击该龙的玩家对象列表。每次新增玩家后,重新计算最新的人均分摊伤害,遍历所有正在攻击这条龙的玩家,同步更新每个人对应该龙的伤害分配值即可。

修改后的完整可运行代码:

class Player:
    def __init__(self, name):
        self.name = name
        self.damage_to_deal = {} # 存储格式: {'龙名称': 需要对该龙造成的伤害值}

class Dragon:
    def __init__(self, name, health):
        self.name = name
        self.health = health
        # 替换原有的玩家计数变量,直接存储所有攻击该龙的玩家对象
        self.attacking_players = []

    def add_player(self, player):
        # 将新玩家加入攻击列表
        self.attacking_players.append(player)
        # 计算最新的人均需要承担的伤害
        per_damage = self.health / len(self.attacking_players)
        # 遍历所有攻击该龙的玩家,同步更新伤害值
        for attacker in self.attacking_players:
            attacker.damage_to_deal[self.name] = per_damage

# 测试逻辑
if __name__ == "__main__":
    # 创建3名玩家
    player_A = Player(name='Josh')
    player_B = Player(name='Steven')
    player_C = Player(name='Robert')

    # 创建2条龙
    dragon_A = Dragon(name='Gamacial', health=475)
    dragon_B = Dragon(name='Nibiru', health=150)

    # 3名玩家全部攻击龙A
    dragon_A.add_player(player_A)
    dragon_A.add_player(player_B)
    dragon_A.add_player(player_C)

    # 仅玩家A、B攻击龙B
    dragon_B.add_player(player_A)
    dragon_B.add_player(player_B)

    # 打印结果
    print(f'{player_A.name} will have to do: {player_A.damage_to_deal}')
    print(f'{player_B.name} will have to do: {player_B.damage_to_deal}')
    print(f'{player_C.name} will have to do: {player_C.damage_to_deal}')

运行后输出完全符合预期:

Josh will have to do: {'Gamacial': 158.33333333333334, 'Nibiru': 75.0}
Steven will have to do: {'Gamacial': 158.33333333333334, 'Nibiru': 75.0}
Robert will have to do: {'Gamacial': 158.33333333333334}

如果后续需要扩展玩家退出攻击、龙血量动态变化等功能,只需要在对应触发逻辑中重新计算伤害值,再遍历更新所有关联玩家的对应字段即可,所有关联对象的数据会始终保持同步。

内容的提问来源于stack exchange,提问作者Faindirnomainzein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 01:06:24