Sushmit Chakraborty Ответов: 2

Новичок в кодировании, небольшая помощь, пожалуйста


Поэтому я начал программировать месяц назад. Я взял python в качестве своего языка обучения и подумал о создании rpg-игры(текстовой) из интернет-источников. Вот этот код-

из случайного импорта randint
class Dice:
    def die(num):
        die=randint(1,num)
        return die

class Character:
    def _init_(self,name,hp,damage):
        self.name=name
        self.hp=hp
        self.damage=damage

class Fighter(Character):
    def _init_(self):
        super()._init_(name=input("what is your character's name?"),
                       hp=20,
                       damage=12)
        prof="fighter"

class Assasin(Character):
    def _init_(self):
        super()._init_(name=input("what is your character's name?"),
                       hp=15,
                       damage=14)
        name=input("what is your character's name?")
        prof="assasin"

##NOW FOR ENEMIES

class Goblin(Character):
    def _init_(self):
        super._init_(name="Goblin",
                     hp=15,
                     damage=3)
        hp=15
        name="Goblin"
        damage=3

class Ogre(Character):
    def _init_(self):
        super._init_(name="Ogre",
                     hp=25,
                     damage=6)
        name="Ogre"
        hp=25
        damage=6




def profession():
    print("What is your class?",'\n' "Press f for fighter" , '\n' "Press a for assasin")
    pclass=input("Enter your choice>>>")
    if(pclass=="f"):
        Prof=Fighter()
    elif(pclass=="a"):
        Prof=Assasin()
    else:
        Prof=Fighter()
    return Prof

def ranmob():
    if Dice.die(2)<2:
        mob=Ogre()
    else:
        mob=Goblin()
    return mob

def playerAttack():
    print("You hit")
    if (hero.prof=="fighter"):
        if(Dice.die(8)<8):
            print("them for 12 damage")
            mob.hp-=12
            print("The",mob.name,"has",mob.hp,"hp left")
        else:
            print("You missed your attack")
    elif(hero.prof=="assasin"):
        if(Dice.die(8)<8):
            print("them for 14 damage")
            mob.hp-=14
            print("The",mob.name,"has",mob.hp,"hp left")
        else:
            print("You missed your attack")

def monsterAttack():
    print("The monster attacks")
    if(mob.name=="Ogre"):
        if(Dice.die(8)<8):
            print("6 damage taken")
            hero.hp-=6
        else:
            print("The attack misses")

    elif(mob.name=="Goblin"):
        if(Dice.die(8)<8):
            print("3 damage taken")
            hero.hp-=3
        else:
            print("The attack misses")

def commands():
    if hero.prof=="fighter":
        print("press f to fight\n","press e to pass")
        command=input(">>>>>")
        if(command=="f"):
            playerAttack()
        elif command=="e":
            pass

mob=ranmob()
hero=profession()

#print("name hp",'\n',hero.name,hero.hp)

while True:
    if mob.hp<=0:
        print('The',mob.name,'is dead')
        mob=ranmob()
    if hero.hp<=0:
        print(hero.name,'died!')
        hero=profession()
        print("name hp",'\n',hero.name,hero.hp)

    print("You see",mob.name,",",mob.name,"has",mob.hp,"hp")
    if hero.hp>0:
        commands()
    if mob.hp>0:
        monsterAttack()

Но когда я пытаюсь запустить его,он показывает начальный выбор символов, после чего выдает ошибку-
Traceback (most recent call last):
  File "C:/Users/Hi/Desktop/python programs/nvm/MYFIRSTGAME.py", line 117, in <module>
    if mob.hp<=0:
AttributeError: 'Goblin' object has no attribute 'hp'

Кто-нибудь может мне помочь? Заранее спасибо :-)

Что я уже пробовал:

Не знаю, что вызывает эту проблему

2 Ответов

Рейтинг:
8

Richard MacCutchan

В дополнение к хорошо заметной ошибке Карло:
- Вам не нужно заявлять об этом name, hp и damage в ваших подклассах, так как они уже определены в Character.
- Этот Fighter и Assassin классы нуждаются в self ключевое слово перед prof атрибут.


Sushmit Chakraborty

Большое вам спасибо,вы решили 2 мои проблемы :-)

Рейтинг:
16

CPallini

Конструктор есть

__init__
(обратите внимание на двойные подчеркивания), не
_init_


Sushmit Chakraborty

Спасибо :-)

CPallini

Добро пожаловать.

Richard MacCutchan

+5, орлиный глаз.

CPallini

Нет. Экспериментальное доказательство. :-)
Кстати, спасибо тебе, Ричард.