2016-09-15 2 views
-1
import random 

class game: 

    def __init__(self): 
     self.hp = random.randint(1,20) 
     self.dmg = random.randint(1,15) 
     self.regn = random.randint(1,3) 

     self.stab = 3-self.hp 
    def player(self): 
     print("Health") 
     print(self.hp) 
     print("Damage") 
     print(self.dmg) 
     print("Regen") 
     print(self.regn) 

    def Mob_1(self): 
     hit = self.hp - 3 

     if 1 == 1 : 
      print("you were hit") 
      hit 

     self.mob1_hp=8 
     self.mob1_dmg=4 
     while self.mob1_hp <= 0: 
      hit 
      self.mob1_hp -= self.dmg 
     print(self.mob1_hp) 

    goblin = Mob_1('self') 


    def day_1(self,goblin): 
     print("\nIt day one") 
     goblin 

Первая функция работает отлично player(self), но я получаю сообщение об ошибке при попытке утверждения сделать другую. Чтобы объяснить, почему я сделал гоблина, я могу сразу вызвать всю функцию (или это было сделано для нее). В частности, ошибка состоит из строки кода hit = self.hp - 3. Для получения дополнительных разъяснений здесь сообщение об ошибке:Я получаю ошибку утверждения и я не знаю, почему

Traceback (most recent call last): 
    line 3, in <module> 
    class game: 
    line 33, in game 
    goblin = Mob_1('self') 
line 20, in Mob_1 
    hit = self.hp - 3 
AttributeError: 'str' object has no attribute 'hp' 

п.с. Я новичок в этом сайте я смотрел на вопросы в прошлом для помощи, но я не могу найти способ исправить это

+1

'AttributeError' это другое дело, чем' AssertionError'. – Blckknght

ответ

1

Линия goblin = Mob_1('self') не имеет никакого смысла. Вы вызываете метод своего объекта game непосредственно в его теле, но передаете строку 'self' вместо экземпляра класс game. Это разрушит всевозможные вещи.

Я не совсем уверен, как это исправить, поскольку ваш код не имеет большого смысла, и я действительно не знаю, что вы пытаетесь сделать. Возможно, вы сможете приблизиться к тому, что хотите, если переименовали некоторые из создаваемых вами вещей и реорганизовали их. В настоящее время вы пытаетесь сделать кучу вещей в классе game, который на самом деле не подходит. Например, вы отслеживаете два набора статистики hp, которые выглядят скорее как статистика персонажей, сражающихся, чем статистика самой игры.

Так вместо game класса, я предлагаю вам создать Creature класс, который отслеживает статистику для одного существ (либо игрока, или врага):

class Creature: 
    def __init__(self, name, hp, damage, regen): 
     self.name = name 
     self.hp = hp 
     self.damage = damage 
     self.regen = regen 

    def __str__(self): 
     return "{} (Health: {}, Damage: {}, Regen: {})".format(self.name, self.hp, 
                   self.dmg, self.regen) 

Игрока и монстры будут экземпляр этого класса (или, возможно, экземпляр подклассов, если вам нужно настроить их больше). Вы можете написать функцию, чтобы два из них бороться друг против друга:

def fight(creature1, creature2): 
    while creature1.hp > 0 and createure2.hp > 0: 
     creature1.hp -= creature2.damage 
     creature2.hp -= creature1.damage 
     # do something with regen here? 
     # report on damage? 

    if creature1.hp < 0 and creature2.hp < 0: 
     print("Both {} and {} have died".format(creature1.name, creature2.name)) 
    else: 
     print("{} has died".format((creature1 if creature1.hp < 0 
            else creature2).name.capitalize()) 

Зов это следующим образом:

player = Creature("the player", 
        random.randint(1,20), 
        random.randint(1,15), 
        random.randint(1,3)) 
goblin = Creature("the goblin", 8, 4, 0) 

print("Battle between {} and {}:".format(player, goblin)) # uses __str__ 

fight(player, goblin) 
Смежные вопросы