2017-04-18 45 views
0

我試圖創建一個函數來提高max hp,只要stat增加或減少。我試圖改變self.maxHpCalc()播放器。**將變量=(int)移動到任何爲什麼我可以想到並且一直沒有運氣的orc類中。取決於我如何改變它我得到自己/球員沒有屬性的力量,maxHp或maxHpCalc沒有定義。在python中使用基於文本的遊戲的類

class player: 
    def __init__(self, hp = 1 , maxHp = 1, strength = 4, defense = 5): 
     self.hp = hp 
     self.maxHp = maxHpCalc() 
     self.strength = strength 
     self.defense = defense 

    def maxHpCalc(): 
     player.maxHp = player.strength + player.defense 

class orc(player): 
    def __init__(self, hp, maxHp, strength , defnese): 
     super().__init__(hp, maxHp, strength, defense) 
print(player.maxHp) 

一切我改變給我的播放器/自無屬性力量的時刻

+0

我已閱讀過這篇文章,但我很努力地想看到一個問題。你只是尋找一些保證,你做對了嗎? –

+0

哈哈是的,頂部。或多或少,我只是在跟自己說話。如果看起來沒錯的話就忽略它。主要是我在最後遇到了所有def函數的問題。因爲我希望他們是一個不斷變化的變量,這取決於統計數據是什麼。所以我遇到像「玩家沒有屬性upperStrength」或maxHPCalc未定義的錯誤。至於現在我有一個raiseStat()函數,並有maxHp =(公式),並且工作,但從我所看到的應該有一種方法將該函數放入類maxHp = maxHpCalc()我還沒有找到了一種方法來使其工作。 – Reederboard

+0

你有沒有嘗試用一個縮進這些函數,所以它們屬於這個類的範圍?在這裏你永遠無法確定這些縮進錯誤不是將代碼粘貼到文本框中的結果,也不是原始海報代碼中的真正錯誤。 –

回答

0

下面是一些固定的代碼,用小的驅動程序行使類。

請注意以下更改

  1. 功能maxHpCalc應該是一個結合的方法,如果是包含在一個player實例數據進行操作。因此它應該有一個self參數,並應參考該自引用的strengthdefense
  2. 致電_maxHpCalc時,應參考self。我使它成爲一種綁定方法,它需要一個實例來處理。我添加了一個下劃線來表示它是一個私有方法。
  3. 你應該叫maxHpCalc設置的strengthdefense值之後,否則,他們不會在函數被調用的時候定義。
  4. player.maxHp是沒有意義的。 player是一類,沒有靜態 屬性maxHp,您需要一個實例來訪問該屬性。我創建了一個實例並引用它。

代碼:

class player: 
    def __init__(self, hp=1, maxHp=1, strength=4, defense=5): 
     self.hp = hp 
     self.strength = strength 
     self.defense = defense 
     self.maxHp = self._maxHpCalc() 

    def _maxHpCalc(self): 
     return self.strength + self.defense 

class orc(player): 
    def __init__(self, hp, maxHp, strength , defense): 
     super().__init__(hp, maxHp, strength, defense) 

p = player() 
o = orc(1,2,3,4) 

print(p.maxHp) 
print(o.maxHp) 

我也有問,爲什麼有一個構造函數的參數maxHp如果你不使用它,但是從其他參數計算呢?

+0

加下劃線似乎是我的主要問題。我甚至不知道這是你可以添加的東西。刪除它給出相同的錯誤,以便修復它可行。只要maxHp = 1,它就沒有真正的目的。這幾天我一直在搞這樣的事情,並且把自己弄糊塗了。因爲我無法讓功能工作,所以我蠻橫強迫它在一個不同的功能裏面,只是爲了勉強我的公式,並繼續在沒有崩潰的情況下 也打印語句給出了9和7?還有什麼是獸人(1,2,3,4)的? – Reederboard

+0

@Reederboard下劃線對程序沒有任何影響,只要它在函數定義和使用時存在或不存在即可。這只是一個慣例。 –

+0

如果刪除了下劃線,它將失敗:self.maxHp = self.maxHpCalc() AttributeError:'player'對象沒有屬性'maxHpCalc' – Reederboard