2017-04-05 35 views
-1

我很困惑如何正確實現一個遊戲管理器類(用來控制程序的大部分方面,比如主循環)和變量和常量程序。據我所知,變量和常量應該在主函數中定義,然後以某種方式傳遞給遊戲經理。但是,這提出了一些障礙。到目前爲止,我已經拿出了3個選項:如何在Python中正確實現遊戲管理器

  1. 定義在主函數變量和它們傳遞到類(最標準)

    class Game: 
        def __init__(self, size, speed): 
         self.size = size 
         self.speed = speed 
    
    def main(): 
        SCREEN_SIZE = 10 
        GAME_SPEED = 30 
        game = Game(SCREEN_SIZE, GAME_SPEED) 
        game.mainloop() 
    
    if __name__ == "__main__": 
        main() 
    
  2. 定義變量的類本身

    class Game: 
        def __init__(self): 
         self.screen_size = 10 
         self.game_speed = 30 
    
    def main(): 
        game = Game() 
        game.mainloop() 
    
    if __name__ == "__main__": 
        main() 
    
  3. 使全球

    SCREEN_SIZE = 10 
    GAME_SPEED = 30 
    
    class Game: 
        def __init__(self): 
         pass 
    
    def main(): 
        game = Game() 
        game.mainloop()  
    
    if __name__ == "__main__": 
        main() 
    
    變量
  4. (可能的選擇)完全沒有遊戲管理員課程。

數字1會變得更煩人,更大的程序會有更多的變量,因此會傳遞更多的信息給班級。數字2違背了一個階級的觀點。 3號似乎是不好的做法。是否有我失蹤的替代方案?

+1

[在Python中創建單例]的可能重複(http://stackoverflow.com/questions/6760685/creating-a-singleton-in-python) – AChampion

+0

我幫助某人提出了有關單例的代碼問題剛剛開始工作。他的問題(以及他參考的工作代碼)在這裏,可以證明對您的事業有用: http://stackoverflow.com/questions/42226099/why-does-a-scene-take-a-scene-manager- as-a-parameter/ – oxrock

+0

在這種情況下,他有兩個控制遊戲的主類(Director和Scene類)。我打算只有一個,因爲這看起來比兩個可以合併的單獨的類更高效和更合乎邏輯。 – Anton

回答

0

下面是我會做:

class Game(object): 
    def __new__(cls): 
     if not hasattr(cls, 'instance'): 
      cls.instance = super(Game, cls).__new__(cls) 
     return cls.instance 

    screen_size = 10 
    game_speed = 30 

然後,你可以實例化,在你的main()