2013-10-29 50 views
2

我試圖在遊戲中設置分數我在python/pygame編程。從另一個類python增加分數

我的工作成績時,我有這樣的:

global score 
score = 0 

僞:

if player_rect.coliderect(baddie_rect): 
     score +=1 

然後我顯示的比分到屏幕上。

但我想在另一個類的函數中使用這個分數。在主類中調用該函數的位置。

所以

碰撞的功能,我想增加分數,這是一個球員類。但我想在主課堂上打印分數。我有這樣的事情使用縮短的代碼:

class player: 
    . 
    . 
    . 
    global score 
    score = 0 
    def __init(self): 
     self.score=0 
    def get_score(self): 
     return self.score 
    def set_score(self, score): 
     self.score = score 
    def collision(): 
     . 
     . 
     if player_rect.coliderect(baddie_rect): 
      self.score +=1 

當我嘗試當發生碰撞時得到的分數:

class main(): 
    player = player() 
    player.colision() 
    print player.get_score() 

什麼也沒有發生,比分犯規增量!

有什麼建議嗎?

+1

進去'碰撞()'你'遞增player.score',而不是全球'比分'。如果你想更新全球分數,你應該打電話'score = self.score' –

回答

5
class Player: 
    def __init(self): 
     self.score=0 
    def collision(): 
     if player_rect.coliderect(baddie_rect): 
      self.score +=1 


class main(): 
    player = Player() 
    player.collision() 
    print(player.score) 

沒有必要在這裏全局。 In Python, you almost never need getters or setters。直接訪問或設置實例屬性score。如果您需要self.score來執行更復雜的操作,您可以使用make it a property,這將允許您在不更改語法的情況下定義類似getter/setter的行爲。

+0

+1並且接受非常感謝! :-) –

1

你的代碼,除了「全球」(這是完全不需要的)似乎是正確的。是真的,在Python是首選屬性而不是訪問方法,但在這種情況下,它不應該是錯誤。

你爲什麼不改變碰撞()的代碼是:

def collision(): 
    self.score += 1 

,然後嘗試看看錯誤是別的地方,也許在 player_rect.coliderect(baddie_rect):

我並不是說,錯誤是存在的,但我希望你明白了吧,從簡單到複雜