2016-03-15 49 views
1

這裏是新的python學習器。我試圖在Python中設計一個文本RPG,並且我希望所有敵方怪物的統計數據在遊戲的特定部分增加。這裏是我的代碼爲一些人的敵人:Python,如何在大類下創建特定的類

class Executioner: 
    def __init__(self,name): 
    self.name = name 

    self.potions = 0 
    self.maxhp = 800 
    self.hp = self.maxhp 
    self.attack = 25 
    self.ability = 0 
    self.defense = 0 
    self.goldgain = 333 
    self.expgain = 250 
ExecutionerIG = Executioner("Executioner the slayer") 

class Goblin: 
    def __init__(self,name): 
    self.name = name 

    self.potions = 0 
    self.maxhp = 80 
    self.hp = self.maxhp 
    self.attack = 25 
    self.ability = 0 
    self.defense = 0 
    self.goldgain = 5.5 
    self.expgain = 22 
GoblinIG = Goblin("Goblin") 

class Zombie: 
    def __init__(self,name): 
    self.name = name 

    self.potions = 0 
    self.maxhp = 180 
    self.hp = self.maxhp 
    self.attack = 19  
    self.ability = 0 
    self.defense = 0 
    self.goldgain = 7 
    self.expgain = 28 
ZombieIG = Zombie("Zombie") 

我想一個辦法做到這一點很快可以定義這些類放入一個大班裏叫敵人,然後調用enemies.hp,enemies.attack等增加。

但我不知道該怎麼做,因爲我現在相當不滿意。

關於如何通過指定大班級下的小班級或快速增加班級統計數據的方式來增加班級統計數據的建議(只需輸入並增加班級數據將不起作用,因爲我將擁有大量敵方小怪)將會非常感謝。

回答

1

丹尼爾羅斯曼說的是真的,你應該在編寫代碼時不要重複自己。如果兩個對象非常相似並且只在某些特定值上有所不同,那麼它們確實是同一個對象。所有的自行車都是自行車,但也有一些車輪尺寸不同。在這裏,你的對象都是一個敵人對象,並且可以這樣實現。

然而,我會回答你的問題,因爲子類化是非常重要的知道。要繼承一個類,你在父類傳遞一個定義,像這樣:

class Enemy: def attack(): <your code>

,你可以:

class Zombie(Enemy):

然後如果敵人類,像這樣的例子定義對殭屍對象進行攻擊。它會在Zombie類中尋找attack(),如果它找不到它,它會在父類中尋找它。如果它沒有在父類中找到它,它將在該父類中尋找它,等等,一直移動到頂層對象。如果它根本找不到它,則會引發異常。例如,如果您在殭屍類中定義了攻擊(),則它會覆蓋Enemy類中的attack()。

儘管如此,Daniel Roseman是對的。你應該把所有這一切放在一個班,並在施工後通過馬力等。

+0

感謝您的幫助,但您再次知道如何去做Daniel Roseman所說的話?在通用Enemy類的__init__方法中接受這些值?一個詳細的例子將不勝感激! – pythonsohard

+0

這與您使用name屬性所做的相同。所以你應該有'def __init __(self,name,maxhp,attack,ability,defense,goldgain,expgain):self.name = name self.maxhp = maxhp self.attack =攻擊self.ability =能力self.defense =防禦self.goldgain = goldgain self.expgain = expgain'那麼你可以創建一個殭屍通過以下操作: 'zombie =敵人(「殭屍」,180,19,0,0,7,28)' – MercuryMan

1

不,這不是一個好辦法。嵌套類在Python中很少用,在這裏肯定不會有幫助。

好多簡單地把它們放入一個列表,你可以遍歷:

enemies = [] 
... 
ExecutionerIG = Executioner("Executioner the slayer") 
enemies.append(ExecutionerIG) 

等。然後,在必要的時候,只是重複:

for enemy in enemies: 
    enemy.hp += 1 

順便說一句,我會質疑你是否真的需要劊子手,殭屍和地精單獨的類;他們只在每個屬性的數字上有所不同,所以也許你應該接受__init__方法中針對普通敵人類的值。

+0

你能給我一個例子:「接受通用敵人類的__init__方法中的那些值」你說我嘗試過但是它錯了。你說的話可能是正確的,但我不知道該怎麼做。 – pythonsohard

+0

與「name」屬性完全相同。 –

相關問題