2017-04-05 68 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()