Oop 游戏架构:类泄漏到几乎所有文件中

Oop 游戏架构:类泄漏到几乎所有文件中,oop,design-patterns,architecture,game-engine,Oop,Design Patterns,Architecture,Game Engine,我们目前的问题是,我们的主类GameController被拉入游戏中的每个后端文件。我们想知道这个问题的常见解决方案是什么 这里有更多关于游戏架构的信息。该游戏是一个棋盘游戏,因此,由于90-95%的时间都没有发生任何事情,因此该游戏的设置更像是一个RESTAPI。它等待用户提示,当收到提示时,消息被分发到游戏的各个组件,并执行正确的逻辑。没有大的更新循环,只是在提示时执行逻辑 问题是,当消息通过系统级联时,GameController更像是系统之间的中继点。这是节点之间的通信方式,以便正确更新

我们目前的问题是,我们的主类
GameController
被拉入游戏中的每个后端文件。我们想知道这个问题的常见解决方案是什么

这里有更多关于游戏架构的信息。该游戏是一个棋盘游戏,因此,由于90-95%的时间都没有发生任何事情,因此该游戏的设置更像是一个RESTAPI。它等待用户提示,当收到提示时,消息被分发到游戏的各个组件,并执行正确的逻辑。没有大的更新循环,只是在提示时执行逻辑

问题是,当消息通过系统级联时,
GameController
更像是系统之间的中继点。这是节点之间的通信方式,以便正确更新所有游戏组件。问题是它创建了一个系统,其中所有新/旧类都包含指向
parentGame
的指针,因此
GameController
无处不在

是否有任何简单的架构解决方案可以避免每个类都包含指向
parentGame
的指针?这一定是件坏事吗

一些示例代码:

class GameController {
    bank: Bank
    action: Action
    ...
}
class Bank {
    parentGame: GameController

    constructor(game: GameController) {
        this.parentGame = game
    }
}
class Action {
    parentGame: GameController

    constructor(game: GameController) {
        this.parentGame = game
    }
}

我不相信这是一件坏事,但是你可以把它清理成一个中间的某种机制,换句话说,它可能会给你一些你想要的解耦。


它不必是通过外部消息服务进行通信的任何东西——这只会引入不必要的开销。我想到了这个问题。

这是一个很好的答案。静态发布/订阅也可以帮助管理此处的依赖项,这可能毫无价值。这种发布/订阅总是可以在引擎盖下使用一个容器来允许交换实现,但是内存中的发布/订阅实际上并不妨碍可测试性<代码>游戏事件。发布/订阅。