Python/Pygame: подкласс не находит переменную
Возможно, не правильный заголовок, но я не знаю, как еще сформулировать его.
Я пытаюсь рассчитать статистику на основе гибких значений, в частности HP и MP, и вернуть значения, чтобы их можно было распечатать на экране. Я попытался создать отдельный класс для статистики и вызвать его, изменив его на self.HP как в статистике, так и когда она вызывается, но, похоже, ничего не работает, и я не могу понять, как это исправить.
Я знаю, что это много кода, но кто-то может взглянуть на это, пожалуйста?
E1: После копирования правильного кода здесь (я идиот -_-') и смены HP на self.HP программа превращается в бананы... Она буквально запускает себя на смерть.
import formulae
from formulae import *
characters = {"1":battle_maiden("Hibikime")}
enemies = {"a":enemy("Enemy")}
while characters["1"].alive and enemies["a"].alive:
print
for charactersKey, in sorted(characters.keys()):
print(characters[charactersKey])
Код, который находится в формуле.py:
class character(object):
def __init__(self, name):
self.name = name
self.alive = True
self.Hit = 10
self.Dodge = 0
self.Lv = 1
def __str__(self):
if self.alive:
return "%s (%i HP, %i MP)" % (self.name, self.HP, self.MP)
else:
return "%s (DEAD)" % self.name
def attack(self, enemy):
print(self.name, "attacks", enemy.name)
enemy.hit()
def hit(self):
self.HP -= self.Atk
print(self.name, "is hit! (",self.Atk,")")
if self.HP <= 0:
self.die()
def die(self):
self.alive = False
print(self.name, "died.")
class enemy(object):
def __init__(self, name):
self.name = name
self.alive = True
self.HP = 100
self.MP = 20
self.M_Atk = 10
self.Atk = 30
self.Def = 5
self.M_Def = 5
self.Hit = 10
self.Dodge = 0
def __str__(self):
if self.alive:
return "%s (%i HP, %i MP)" % (self.name, self.HP, self.MP)
else:
return "%s (DEAD)" % self.name
def attack(self, enemy):
print(self.name, "attacks", enemy.name)
enemy.hit()
def hit(self):
self.HP -= self.Atk
print(self.name, "is hit! (",self.Atk,")")
if self.HP <= 0:
self.die()
def die(self):
self.alive = False
print(self.name, "died.")
##SUBCLASSES FOR CHARACTERS##
class battle_maiden(character):
def __init__(self, name):
super(battle_maiden, self).__init__(self)
classHP = 80
classMP = 5
Vitality = 10
Wisdom = 3
Intelligence = 2
Strength = 15
Defense = 5
Dexterity = 15
Agility = 2
self.HP = (classHP + (self.Lv*5) + (Vitality *(self.Lv *0.3)))
self.MP = (classMP + (self.Lv*2) + (Wisdom *(self.Lv *0.2)))
Atk = (Strength * (self.Lv*0.2))
M_Atk = (Intelligence * (self.Lv*0.2))
Def = (Defense + (self.Lv*1.5) + (Defense*0.1))
M_Def = (Intelligence + (self.Lv*1.5) + (Intelligence*0.1))
Ошибка, которую я получаю:
вернуть "% s (% i HP,% i MP)"% (self.name, self.HP, self.MP)
RuntimeError: превышена максимальная глубина рекурсии
1 ответ
Во-первых, во-первых, двойной импорт непослушен, поэтому не делайте этого;)
И исправить это довольно просто, вам просто нужно заменить заменить
super(battle_maiden, self).__init__(self)
с
character.__init__(self, name)
По этой причине, попробуйте выяснить самостоятельно. Если не сможешь через 30 минут, спроси в комментарии и я его испорчу;)