修改后实例变量重置

时间:2016-11-23 05:31:32

标签: python-3.x

我的代码中有一小部分有困难。我在战斗中修改了玩家的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.damageplayer.inventory.append(shoes)player.inventory.append(shank)。他们都没有工作。 player.hp在战斗期间正确显示并按预期减少,但是一旦玩家退出战斗,HP将重置为100并且没有任何内容添加到库存中。我已经针对HP问题尝试player.hp = player.hp - enemy.damage,但它仍然会创建一个新变量。我不确定自敌人部分工作正常以来发生了什么。

如果需要更多信息,请告诉我。如果有任何明显的方法可以改进我的代码,我完全愿意接受建议。

1 个答案:

答案 0 :(得分:0)

知道了!我在方法中定义了player = Player(),所以它只创建了该方法的实例(我认为)。所以我在方法之外定义了它,现在修改后的值仍然坚持!