将游戏指针传递给单元(循环包含,python)



编辑:我在寻求建议/正确的代码结构

当前的布局(可能是错误的)是:

  • Game存储playerscreenunits
  • Game处理顶层逻辑,用户输入等
  • screenplayer使用整个程序范围
  • units列表被修改(添加+删除)在游戏

如果我想访问units列表,或Game.spawn_foo()Game.width,我应该如何重构我的代码?

  1. 使单元。py可以访问Game()实例?
<标题>代码:(更新)

game.py

class Game(object):
    def __init__(self):
        self.screen = # video
        self.player = Player()
        self.units = [Unit(), Unit()]
    def loop(self):            
        while True:
            self.screen.blit( self.player.sprite, self.player.location )
            for u in self.units:
                self.screen.blit( u.sprite, u.location )
    def spawn_foo(self):
        # tried to call from Unit() or Player()
        self.units.append( ...rand Unit()... )
if __name__ == '__main__':
    game = Game()
    game.loop()

unit.py,使用函数或方法

class Unit(object):
    def __init__(self, game):
        self.sprite = # image
        self.location = (0, 0)
    def teleport(self):
        # attempt to use game here
        x = game.width / 2, 
        y = game.height / 2
        self.location = (x, y)

是否有任何理由不在每个单元中保持对游戏的引用-例如在Unit.__init__(...)中添加一行self.game = game,然后在你的传送方法中使用它?

我能想到的唯一原因是您可能担心创建不会被垃圾收集的循环引用,在这种情况下,您可以查看weakref包,尽管在您的示例中可能不是太大的问题。

相关内容

  • 没有找到相关文章

最新更新