Python RPG混淆

时间:2019-04-26 15:14:00

标签: python

我的代码有问题,在调用该代码时,它似乎会使战斗持续的时间比应有的长。

我认为问题出在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次。

我也看到有时候它也可以正常工作。结果不一致也不行。谢谢!

2 个答案:

答案 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>