为何计算剩余HP的函数返回值与伤害值一致?Python游戏开发问题
问题分析与修复
你的问题核心是**actionResult()函数的逻辑错误**,导致剩余HP计算完全颠倒:
错误原因
在characterAction()中,你已经算出了目标角色扣除伤害后的剩余HP(attacked_hp = target_hp - damage),但到了actionResult()里,你却用目标当前HP再减去这个已经算好的剩余HP:
# 错误示例:比如目标原本HP是10,attacked_hp是5(10-5伤害),这里算出来10-5=5,刚好等于伤害值 self.hp_one = self.hp_one - attacked_hp
这就导致最终的剩余HP变成了「原始HP - 剩余HP」,和你描述的现象完全一致。
两种修复方案
方案1:让characterAction()返回伤害值而非剩余HP
修改characterAction()的返回值,只返回计算好的伤害,然后在actionResult()里用目标HP减去伤害:
def characterAction(self, character): if character == "Warrior": attack = self.attack_one + random.randint(1, 3) defence = self.defence_two target_hp = self.hp_two elif character == "Rogue": attack = self.attack_two + random.randint(1, 3) defence = self.defence_one target_hp = self.hp_one damage = attack - defence if damage <= 0: damage = 1 print(character + " attacks for " + str(damage) + " damage.") # 只返回伤害值 return damage def actionResult(self, attackingChar, damage): if attackingChar == "Rogue": self.hp_one = self.hp_one - damage if self.hp_one <= 0: self.hp_one = 0 print(self.name_one + " has 0 HP, he dies.") self.battle_finished = True else: print(self.name_one + " has " + str(self.hp_one) + " health remaining.") elif attackingChar == "Warrior": self.hp_two = self.hp_two - damage if self.hp_two <= 0: self.hp_two = 0 print(self.name_two + " has 0 HP, he dies.") self.battle_finished = True else: print(self.name_two + " has " + str(self.hp_two) + " health remaining.")
方案2:直接使用characterAction()返回的剩余HP赋值
既然characterAction()已经算出了正确的剩余HP,直接把它赋值给目标角色的HP即可,不需要再做减法:
def actionResult(self, attackingChar, attacked_hp): if attackingChar == "Rogue": self.hp_one = attacked_hp if attacked_hp <= 0: print(self.name_one + " has 0 HP, he dies.") self.battle_finished = True else: print(self.name_one + " has " + str(self.hp_one) + " health remaining.") elif attackingChar == "Warrior": self.hp_two = attacked_hp if attacked_hp <= 0: print(self.name_two + " has 0 HP, he dies.") self.battle_finished = True else: print(self.name_two + " has " + str(self.hp_two) + " health remaining.")
额外补充:完善Character类的方法
你的Character类缺少代码中用到的get_name()、get_hp()等方法,需要补充:
class Character: def __init__(self, name): self.name = name if self.name == "Warrior": self.hp = 10 self.attack = 3 self.defence = 2 self.speed = 1 elif self.name == "Rogue": self.hp = 7 self.attack = 3 self.defence = 1 self.speed = 5 def get_name(self): return self.name def get_hp(self): return self.hp def get_attack(self): return self.attack def get_defence(self): return self.defence def get_speed(self): return self.speed
内容的提问来源于stack exchange,提问作者maxpower8888
相关产品推荐
相关产品推荐

