2017-02-15 5 views
0

私はPythonのクラスのコンセプトには本当に新しいので、私の理解の欠如を許してください...私はしばらく前に見たYouTubeのチュートリアルに基づいて基本的で簡単な戦いのRPGをしようとしています。あなたのキャラクターの健康は「90 +レベル* 10」に基づいているという考えがありました。そして私は、私の性格を平準化しようとするまで、レベルアップしたが、最初にプログラムを読み込んだときと同じように、健康状態が変わっていないことを確認するまで、うまくいった。私はなぜこれをやっているのか理解していますが、レベルに基づいて更新するためにはほとんどバイパスして更新する方法がありますか?関数内のクラスをどのように変更できますか?

ここでコード

class Player: 
    def __init__(self): 
     self.level = 1 
     self.maxhealth = 90 + self.level * 10 
     self.health = self.maxhealth 
PlayerIG = Player() 
+0

'self.level'の値が変更されたときに' self.health'の値を自動的に更新したいのですか? –

+0

これはまさに私が探しているものです@leaf –

答えて

2

のビットは

class Player: 
    def __init__(self): 
     self.level = 1 
     self.maxhealth = 90 + self.level * 10 

    def health(self): 
     return 90 + self.level * 10 
PlayerIG = Player() 
print(PlayerIG.health()) 

またはhealthを更新機能を提供し、機能としてのない財産をhealthを定義し、あなたがレベルアップするたびに、それを呼び出しています。

class Player: 
    def __init__(self): 
     self.level = 1 
     self.update_health() 

    def update_health(self): 
     self.health = 90 + self.level * 10 

    def level_up(self): 
     self.level += 1 
     self.update_health() 
+1

@Jonathan答えの精神を変更するために編集を使わないでください。私は実際にこれに似た別のソリューションを追加しようとしていました。 – Barmar

+1

多くのお詫び – Jonathan

+0

ありがとう、私はベースとして最初の答えを使用していますが、私は結果を印刷しようとすると、私はメソッドの場所を取得します。どのように値を印刷できますか? –

0

__init__は、クラスをインスタンス化するときにのみ実行されます。 PlayerIG.level +=1をプレイしているプレイヤーのレベルを現在更新していると思います。そうすれば、__init__は再び実行されないので、maxhealthは更新されないので、レベルアップの方法が必要になります。

class Player: 
    def __init__(self, level): # allows you to create a player of level != 1 
     self.level = level 
     self.maxhealth = 90 + self.level * 10 
     self.health = self.maxhealth 

    def level_up(self): 
     self.level += 1 
     self.maxhealth += 10 

PlayerIG = Player(1) # creates a player of level 1 and maxhealth 100 
PlayerIG.level_up() # PlayerIG is now level 2 with a maxhealth of 110 
関連する問題