2017-03-11 167 views
0

那麼,我試圖做
嗯,我做的是試圖你的性格和敵人之間建立一個作戰系統
所以哪來它會錯
那麼有兩類:如何在另一個類中訪問一個類的屬性?

class Ally 

class Enemy 

每個類都有名,健康,攻擊和防禦自己的獨特屬性

class Ally 
    def __init__(self, name, health, attack, defense): 
     self.name = 'goodguy' 
     self.health = 100 
     self.attack = 50 
     self.defense = 30 
class Enemy 
    def __init__(self, name, health, attack, defense): 
     self.name = 'badguy' 
     self.health = 120 
     self.attack = 40 
     self.defense = 20 

但兩者類盟友和階級敵人需要在每個人的健康和防禦屬性序做損害

class Ally(object): 
    def __init__(self, name, health, attack, defense): 
     self.name = goodguy 
     self.health = 100 
     self.attack = 50 
     self.defense = 30 
    def fight(self) 
     (damage moves) 
     Enemy health = Enemy.health - ((self.attack/Enemy.defense)+2) 
    def battle_script(self) 
     while self.health > 0 and Enemy.health > 0: 
      self.fight() 
      if Enemy.health <=0: 
       break 
      Enemy.fight() 
      if self.health <=0: 
       break 
     if Enemy.health() <= 0: 
      print ('The ' + Enemy.name + ' was defeated') 
     if self.health <= 0: 
      print ("You were defeated") 
class Enemy(object): 
    def __init__(self, name, health, attack, defense): 
     self.name = badguy 
     self.health = 120 
     self.attack = 40 
     self.defense = 20 
    def fight(self) 
     (random damage moves) 
     Enemy health = Ally.health - ((self.attack/Ally.defense)+2) 
Ally.battle_scrip() 

所以問題是,我不知道如何在它們各自的屬性,即拉戰鬥劇本在Enemy.health中調用,我可以將它們全部集成到一個類中,但是當我創建更多的敵人時,我寧願讓它們分開。

+2

我認爲你需要從OOP的基礎開始。 –

回答

1

首先您創建bob = Ally();evil_frank = Enemy();類的實例......除此之外,我不知道你希望基於你給出的代碼,但IM發生在這裏猜測你想要的東西,像什麼如下

def fight(ally,enemy): 
    while ally.is_alive() and enemy.is_alive(): 
     ally.hp -= enemy.dmg 
     enemy.hp -= ally.dmg 
    print "OK FIGHT OVER SOMEONE DIED..." 

fight(bob,evil_frank) 
0

什麼所以你想爲Ally:Enemy類建立一個:多種關係?我會做的是創建一個屬於你的盟友類成員的敵人類對象列表。你甚至可以將一個參數傳遞給你的盟友構造函數來選擇你想要的敵人數量。

應該是這樣的:

import itertools  

class Ally(object): 
    def __init__(self, enemies): 
     self.name = goodguy 
     self.health = 100 
     self.attack = 50 
     self.defense = 30 
     self.enemies = [] 
     for _ in itertools.repeat(None, enemies): 
      self.enemies.append(Enemy()) 
... 

如果你想有一個很多:很多關係,我會創建另一個類,它可以成爲戰鬥的對象。讓我們稱之爲「戰鬥」類。然後你可以做同樣的技巧,爲盟友和敵人制作一個類對象列表,然後在戰鬥類中進行戰鬥。

class Battle(object): 
    def __init__(self, allies, enemies): 
     self.allies = [] 
     self.enemies = [] 
     for _ in itertools.repeat(None, allies): 
      self.allies.append(Ally()) 
     for _ in itertools.repeat(None, enemies): 
      self.enemies.append(Enemy()) 
... 
+0

你想在這裏用'itertools.repeat'完成什麼?我很確定這會給你一個'ValueError'。 –

+0

它創造了你想要的盟友和敵人的數量......擁有多個對象意味着他們每個人都有自己的屬性(屬性),沒有,它不應該給你一個ValueError - 我不知道你爲什麼會認爲。 self.allies =/=盟友。一個是類對象的屬性,另一個是作用域構造函數的屬性。 –

+0

我現在看到。通常情況下,這個習慣用語是'for _ in range(盟友)'但我想重複的作品。 –

相關問題