Python 基于文本的rpg的早期阶段——类和方法

Python 基于文本的rpg的早期阶段——类和方法,python,class,oop,Python,Class,Oop,我正处于使用Python3制作自己的基于文本的Rpg的早期阶段。 我决定创建类(仍然没有完成)来维护不同的角色。 我刚刚遇到了一个关于比赛进攻部分的问题 我试图为我的类创建一个方法,它攻击某些东西。我的问题是让它攻击敌人。我尝试将它与敌人的职业相结合,因此角色攻击敌人的生命。但是,这会产生一个错误,说我没有为敌人定义hp 这是我的课程: class Mage(): def __init__(self,name): self.name = name self

我正处于使用Python3制作自己的基于文本的Rpg的早期阶段。 我决定创建类(仍然没有完成)来维护不同的角色。 我刚刚遇到了一个关于比赛进攻部分的问题

我试图为我的类创建一个方法,它攻击某些东西。我的问题是让它攻击敌人。我尝试将它与敌人的职业相结合,因此角色攻击敌人的生命。但是,这会产生一个错误,说我没有为敌人定义hp

这是我的课程:

class Mage():
    def __init__(self,name):
        self.name = name
        self.hp = 100
        self.mana = 200
        self.spellpower = 1
    def fireball(self, enemy):
        dmg = 10 * self.spellpower
        self.mana -= 20
        enemy.hp -= dmg
class Orc():
    def __init__(self):
        self.name = "Orc"
        self.hp = 20
        self.dmg = 5
    def hit(self):
        dmg = self.dmg
这是代码的其余部分(最后我使用fireball方法):


您正在
Orc
上调用fireball,它是类,但不是实例。先实例化一个兽人,然后对其调用火球。这相当于试图在整个兽人种族中调用fireball,而不是在特定兽人身上调用fireball。

你需要
Orc()
来做一个OrcNice类比的例子,尽管这更像是在整个兽人工厂中投掷fireball,而这个工厂没有处理这种行为所需的属性。:)
print ("Welcome to the game")
name = input("What is your name? ")

class1 = input("Choose your class: (Fighter, Mage) ")
if class1 == "Fighter" or class1 == "fighter":
    print (f"welcome Fighter,{name}. Grab your sword and come with me")
    class1 = Fighter(name)
if class1 == "Mage" or class1 == "mage":
    print (f"Come with us Mage {name}, we need your help")
    class1 = Mage(name)
class1.fireball(Orc)