2016-11-23 5 views
0

私のコードの小さな部分で問題があります。私は戦闘中にプレイヤーのHPを修正していますが、戦闘終了時にHPは100にリセットされます。これは敵のHPが保存されているので奇妙です。 print(id(player.hp))を使用すると、player.hpの新しいインスタンスが作成されていることがわかります。なぜか分かりません。私は問題をグーグルで試してみましたが、私の問題に合った例は見つけられません。私は以下のコードの適切な部分だけを含めるようにしようとします(ここでは不要な余分な文章がたくさんあります)が、私はすべてのものを含める必要がある場合。 fight()が呼び出されると変更後のインスタンス変数のリセット

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() 

は、Player()のインスタンスはself.hp = 100のインスタンス変数を持つ引数として送られます。

これは非常に(プレイヤーが死ぬと、それが終了していないという事実をごまかすし、そのような他の愚かな事くださいまだ進行中の作業です:今

、プレイヤーは途中で逃げるとき私の目標は、敵のHPを保存し、プレイヤーのHPを保存し、アイテムをプレイヤーの目録に追加するものです。これまでのところ、敵のHPは正確に保存されています。敵のHPと彼の生きている/死んだ状態は、戦闘が終了したときに大きく働きます。私の問題はplayer.hp -= enemy.damage,player.inventory.append(shoes)、およびplayer.inventory.append(shank)であり、どちらもうまくいきません。player.hpは、 dは期待通りに減少しますが、プレイヤーが戦闘を終了するとHPは100にリセットされ、在庫に何も追加されません。私はplayer.hp = player.hp - enemy.damageをHPの問題として試したが、それでも新しい変数が作成される。私はちょうど敵の部分が正常に動作して以来何が起こっているか分からない。

詳細情報が必要な場合は、お知らせください。私のコードを改善することができる明確な方法があれば、私は提案に完全に対応しています。

答えて

0

ありがとうございました!メソッドの内部にplayer = Player()を定義していたので、そのメソッドのインスタンスが作成されていました(私は思っています)。だから私はメソッドの外でそれを定義し、今は変更された値に固執する!

関連する問題