Class Python/Pygame:子类未找到变量
可能不是正确的标题,但我不知道如何表述它。Class Python/Pygame:子类未找到变量,class,variables,python-3.x,pygame,Class,Variables,Python 3.x,Pygame,可能不是正确的标题,但我不知道如何表述它。 我试图根据灵活的值计算统计数据,特别是HP&MP,并返回值,以便在屏幕上打印。我尝试为统计数据创建一个单独的类,并调用它,在统计数据和调用它时都将其更改为self.HP,但似乎没有任何效果,我不知道如何修复它。 我知道有很多代码,但有人能看一下吗 E1:在复制了正确的代码(我是个白痴--')并将HP改回self.HP后,程序完全疯了。。。它真的会自生自灭 import formulae from formulae import * character
我试图根据灵活的值计算统计数据,特别是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])
Formulas.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))
类字符(对象):
定义初始化(self,name):
self.name=名称
self.alive=True
self.Hit=10
self.Dodge=0
自我保护。Lv=1
定义(自我):
如果self.live:
返回“%s(%i HP,%i MP)”%(self.name,self.HP,self.MP)
其他:
返回“%s(死)”%self.name
def攻击(自身、敌人):
打印(自我名称,“攻击”,敌人名称)
敌人
def命中(自身):
self.HP-=self.Atk
打印(self.name,“命中了!”(“,self.Atk,”))
如果self.HPFirst是First,那么双重导入是顽皮的,所以不要这样做;)
修复这一点非常简单,只需更换
super(battle_maiden, self).__init__(self)
与
至于原因,试着自己去弄清楚。如果你在30分钟内不能,请发表评论,我会破坏它;) 其他地方有战斗少女的代码吗?你似乎也没有为你的角色初始化self.HP——至少不是为你的角色基类或法师初始化self.HP。你这样做是为了敌人。我的错,我从代码中取了一部分,然后从另一个文件中复制了错误的一部分。lol。让我改变它。我还将它改为self.HP,因为HP给我的错误是它没有全局声明。那么super(battle\u maiden,self).\uu init\uuu(name)
呢?没有必要去掉super(),是吗?不,你不必这样做,这是正确的(尽管哪个版本更好,这是一个宗教辩论,我不想讨论)。您只需修复变量,使其传递名称,而不是self;)的实例。我把它放进去是因为我在看一个指南,并试图把它应用到这一点上,它特别声明要在其中添加super()。这听起来很合乎逻辑……你们可以使用超级棒,若这是教程建议的,那个么就坚持下去。请确保下次键入正确的参数;)实际上,我唯一更改的是子类名称。其余部分是从教程中复制粘贴的。:)但是,将self改为name确实解决了这个问题。虽然我不得不承认,我不完全确定为什么。
character.__init__(self, name)