【问题标题】:How to correctly implement a game manager in Python如何在 Python 中正确实现游戏管理器
【发布时间】:2017-04-05 03:11:50
【问题描述】:

我对如何使用该程序的变量和常量正确实现游戏管理器类型的类(控制程序的大部分方面,例如主循环)感到困惑。据我了解,变量和常量应该在主函数中定义,然后以某种方式传递给游戏管理器。然而,这带来了一些障碍。到目前为止,我提出了 3 个选项:

  1. 在 Main 函数中定义变量并将它们传递给类(最标准)

    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号似乎是不好的做法。有没有我想念的替代方案?

【问题讨论】:

  • 我帮助某人提出了有关他不久前正在编写的单例代码的问题。他的问题(以及他引用的工作代码)在这里,可能对您的事业有用:stackoverflow.com/questions/42226099/…
  • 在这种情况下,他有两个主要的类来控制游戏(Director 和 Scene 类)。我的目标是只拥有一个,因为这似乎比拥有两个可以组合的独立类更有效和合乎逻辑。
  • #3 没有问题。使用全局 constants(不可变)是完全可以接受的。开始使用全局变量(可变)时会遇到麻烦。

标签: python pygame coding-style


【解决方案1】:

我会这样做:

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()中实例化它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多