我的代码中有一小部分有困难。我在战斗中修改了玩家的HP,但是当退出战斗时,HP会重置为100.这很奇怪,因为敌人的HP被保留了下来。使用print(id(player.hp))
我可以看到正在创建player.hp
的新实例,我不知道为什么。我试过谷歌搜索问题,但我找不到适合我的问题的例子。我将尝试仅包含下面代码的相关部分(这里有许多多余的必要内容),但如果我需要包含我将要做的所有内容。
class Alleyway(Scene):
room_items = []
room_characters = []
room_enemies = ["hobo"]
def __init__(self):
self.fresh_arrival = True
self.north = False
self.east = True
self.south = True
self.west = False
self.enemy = Hobo()
def fight(self, player, weapon): #Lots of what makes this fun is edited out
while True:
if self.enemy.hp > 0:
print("Do you attack or flee?")
words = input("> ").lower()
if words == "flee":
map_ = Map("alleyway")
game = Engine(map_)
game.play()
if words == "attack":
miss = randint(1,4)
if miss == 1:
print("Too bad, you miss!")
else:
print("You got him!")
self.enemy.hp -= weapon.damage
print("Hobo's HP: {}".format(max(self.enemy.hp, 0)))
if self.enemy.hp > 0:
print("The hobo takes a swing at you.")
hobomiss = randint(1,5)
if hobomiss == 1:
print("He missed!")
else:
print("Ouch, he got you!")
player.hp -= self.enemy.damage
print("Your HP: {}".format(max(player.hp, 0)))
else:
print("No idea what you mean. Attack the man or flee.")
else:
print("You defeat the hobo!")
print()
print("Dirty shoes and shank added to inventory.")
print()
shoes = DirtyShoes()
shank = Shank()
player.inventory.append(shoes)
player.inventory.append(shank)
self.room_enemies.remove("hobo")
map_ = Map("alleyway")
game = Engine(map_)
game.play()
调用fight()
时,Player()
的实例作为参数发送,其实例变量为self.hp = 100
。
这仍然是一项正在进行中的工作,所以请掩饰这样一个事实:当玩家死亡时它不会退出,而其他愚蠢的事情也是如此(
现在,当玩家在战斗中逃离时,我的目标是为了保护敌人的HP,保护玩家的HP,以及要添加到播放器广告资源的商品。到目前为止,敌人的HP被准确地保存下来,并且我的代码中关于敌人的HP以及他的活着/死亡状态的其他所有内容在战斗退出时都能很好地发挥作用。我的问题是player.hp -= enemy.damage
,player.inventory.append(shoes)
和player.inventory.append(shank)
。他们都没有工作。 player.hp
在战斗期间正确显示并按预期减少,但是一旦玩家退出战斗,HP将重置为100并且没有任何内容添加到库存中。我已经针对HP问题尝试player.hp = player.hp - enemy.damage
,但它仍然会创建一个新变量。我不确定自敌人部分工作正常以来发生了什么。
如果需要更多信息,请告诉我。如果有任何明显的方法可以改进我的代码,我完全愿意接受建议。
答案 0 :(得分:0)
知道了!我在方法中定义了player = Player()
,所以它只创建了该方法的实例(我认为)。所以我在方法之外定义了它,现在修改后的值仍然坚持!