我的代码有问题,在调用该代码时,它似乎会使战斗持续的时间比应有的长。
我认为问题出在if语句上,所以我一直在与它们打交道,但是我似乎无法正确地做到这一点。
class Enemy:
def __init__(self, Name, HP, ATK, DEF, Damage):
self.Name = Name
self.HP = HP
self.ATK = ATK
self.DEF = DEF
self.Damage = Damage
def attack(attacker, attackee): # The attack function
hit = random.randint(min_roll, max_roll) + attacker.ATK
if (hit > attackee.DEF):
print(attacker.Name, "inflicts", attacker.Damage)
attackee.HP = attackee.HP - attacker.Damage
if attackee.HP <= 0: # if the attackee's health drops below zero
print("With a forceful attack,", attackee.Name, "dies.")
else:
print(attackee.Name, "has", attackee.HP, "HP remaining.")
else:
print("You missed. Better defend!")
def fight(attacker, enemy): # The attack loop takes in two enemy objects
while(attacker.HP >= 0 and enemy.HP >=0):
if attacker.HP >= 0 and enemy.HP >= 0:
attack(attacker, enemy)
else:
print("You're dead")
if enemy.HP >= 0 and attacker.HP >= 0:
attack(enemy, attacker)
else:
print("The enemy is dead")
theClass= Enemy("warrior", 10, 4, 5, 5)
skeleton1 = Enemy("The Skeleton", 10, 4, 5, 5) # This creates a new Skeleton enemy. The order is the Name, HP, ATK, DEF, and Damage.
fight(theClass, skeleton1)
当其中一个角色死亡时,输出应准确停止,并且每个角色一次攻击仅应攻击一次。由于某种原因,当我这次运行代码时,最后一次攻击使战士在骨架死亡之前运行了3次。
我也看到有时候它也可以正常工作。结果不一致也不行。谢谢!
答案 0 :(得分:1)
您希望他们在0 hp时继续攻击吗?将支票更改为if enemy.HP > 0 and attacker.HP > 0
时,输出是什么?
此外,将return
语句放在子句中可能会有所帮助的地方可能会有所帮助;这样,您可以确定一旦其中一个人死亡,战斗就会结束。
答案 1 :(得分:1)
在attack
函数中,您说:
if attackee.HP <= 0:
#如果被攻击者的生命值降至零以下
从注释和if
中的fight
语句来看,当健康状况精确为0时,您不会认为它们已死,并且它们仍然可以战斗。
但是,如果运行状况等于0,则该if
语句也会打印死亡消息。只需对其进行编辑以使其一致:
if attackee.HP < 0:
它将起作用。
如果相反,您希望它们在运行状况恰好为0时死亡,请在attack
函数中保留相等性,但从if
函数中的所有fight
语句中将其删除。 / p>