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'
ps我对这个网站很陌生我过去曾在寻找帮助的问题,但我似乎无法找到解决问题的方法
答案 0 :(得分: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)