Магия модуля не имеет повреждения атрибута

#python #text

#python #текст

Вопрос:

все еще работая над моей текстовой RPG и столкнувшись с ошибкой в моей магии, наносящей урон, я использовал тот же формат, что и мой урон в ближнем бою, но затем понял, что у меня есть отдельная функция для определения best_weapon.damage, и в моих заклинаниях я просто пытаюсь извлечь значение урона из объекта заклинания, чтобы изменить hp противника.

Вот мой magic.py файл iv получил только 2 заклинания для целей тестирования

 import player
class Spell:
    def __init__(self):
        raise NotIMplementedError("Do not create raw spell objects!")

    def __str__(self):
        return self.name


class magic_missle(Spell):
    def __init__(self):
        self.name = "Magic Missle"
        self.discription = "A bolt of condensed magical power that you fling at an opponent."
        self.damage = 15
        self.mana = 10

class fire_ball(Spell):
    def __init__(self):
        self.name = "Fire Ball"
        self.discription = "A ball of fire that explodes on impact."
        self.damage = 20
        self.mana = 15
  

это боевая функция, у меня возникли проблемы с линией enemy.hp =- magic.damage, которая, как я думал, увеличит значение урона ранее выбранного заклинания, но я просто продолжаю получать сообщение об ошибке модуль объекта не имеет значения magic.

     def attack(self):

    spell = [magic_spell for magic_spell in self.spell_book if isinstance(magic_spell,magic.Spell)]
    if not spell:
        print("You have no spells to cast!")
    
    user_input = input('What do you want to attack with? Melee or Magic: ')

    if user_input == str('magic'):
        for i, magic_spell in enumerate(spell, 1):
            print("Choose a spell to cast: ")
            print("{}. {}".format(i,magic_spell))
        
        valid =False
        while not valid:
            choice = input("")
            try:
                if self.mana == 0:
                    print("You dont have enough mana")
                else:   
                    room = world.tile_at(self.x,self.y)
                    enemy = room.enemy
                    print("You use {} against {}!".format(spell,enemy.name))
                    enemy.hp -= magic.damage
                    self.mana = self.mana - spell.mana

                    if not enemy.is_alive():
                        print("You killed {}!".format(enemy.name))
                        
                    else:
                        print("{} HP is {}.".format(enemy.name,enemy.hp))
            except(ValueError,IndexError):
                print("Invalid choice, try again")      
    elif user_input == str('melee'):
        best_weapon = self.most_powerful_weapon()
        room = world.tile_at(self.x,self.y)
        enemy = room.enemy
        print("You use {} against {}!".format(best_weapon.name,enemy.name))
        enemy.hp -=  best_weapon.damage

        if not enemy.is_alive():
            print("You killed {}!".format(enemy.name))
            
        else:
            print("{} HP is {}.".format(enemy.name,enemy.hp))
  

спасибо за любую помощь.

Комментарии:

1. Ваш код должен быть переведен choice в magic_spell объект, а затем получить доступ к damage этому объекту, а не к magic модулю.

2. спасибо, сэр, я думал, что уже пробовал это. сработало как шарм.