2016-09-25 307 views
0

我正在嘗試創建一個基本的遊戲,但我對Python編程場景相當陌生。我遇到過兩個階級(玩家和敵人階級)的問題,我想從玩家和敵人那裏獲得類似健康的變量,反之亦然。有什麼辦法做到這一點?如何將變量從一個類傳遞到另一個類?

這裏是更好地強調什麼,我問代碼:

class Player(object): 
     def __init__(self, image): 
      self.x = 100 
      self.y = 240 
      self.health = 30 
      self.defense = 25 
      self.image = image 
      self.black = (0, 0, 0) 
      self.draw() 

     def draw(self): 
      screen.blit(self.image, (self.x, self.y)) 
      line = pygame.draw.rect(screen, self.black, (80, 300, 100, 5)) 

     def attack(self): 
      pass 

    class Enemy(object): 
     def __init__(self, image): 
      self.x = 480 
      self.y = 240 
      self.health = 20 
      self.defense = 15 
      self.image = image 
      self.black = (0, 0, 0) 
      self.draw() 

     def draw(self): 
      screen.blit(self.image, (self.x, self.y)) 
      line = pygame.draw.rect(screen, self.black, (460, 300, 100, 5)) 

     def attack(self): 
      pass 

基本上,我不明白我怎麼可以像從一個類中的「self.health」,並輕鬆訪問來自其他班級。我嘗試了一些使用返回方法等方法,但我很好奇,如果有任何簡單的方法來做到這一點。幫助表示讚賞!

+0

這些不是」類變量「。您的標題有誤導性。 「來自另一個班級的變量」是可以的。 – zvone

+0

您需要製作這些類的實例,並確保它們是公共的(這會使它們受到編輯)或私有的,這些封裝它們並使它們對外部範圍不可變。你需要方法來返回這些值,如果它們是私人的 –

+0

通常會有一個對象來處理整個遊戲。我們稱之爲「遊戲」。它可以訪問'self.player = Player()'和'self.enemy = Enemy()'。然後很簡單...'game.enemy.health' – zvone

回答

0

此代碼創建一個類,並且在特殊的__init__方法中,它將值分配給各種成員變量

class Player(object): 
    def __init__(self, image): 
     self.x = 100 
     self.y = 240 
     self.health = 30 
     self.defense = 25 
     self.image = image 
     self.black = (0, 0, 0) 
     self.draw() 

這些成員變量也被稱爲屬性在Python。如果你有一個Player實例的引用(Player類的一個實例):

p = Player() 

您可以訪問屬性所有你喜歡:

print(p.health) 

也許你需要某種形式的「主循環「或控制器類,可以訪問玩家和敵人,並可以相應地設置其屬性:

class MainLoop(object): 

    def __init__(self): 
    self.player_1 = Player() 
    self.enemy_1 = Enemy() 

    def run(self): 
    if fight(): # fight() is some function of your game 
     self.player_1.health -= 10 
     self.enemy_1.health -= 20 
相關問題