# Atama ## 系统设计 - 将游戏规则与网络、交互等分离 - 游戏规则相关逻辑要便于测试 - 接入 AI ### 模块划分 #### Game 游戏核心部分,实现 Atama 规则。 可以在创建时通过参数指定不同规则。更进一步,可以支持多个游戏。 #### Server 接收不同来源(网络、进程)的用户动作,顺序化后依次应用(apply)到 Game 上,并在每次应用后将用户视角(User View)发回。 #### GUI/Robot 产生操作序列,接收用户视角。 #### NetworkProxy/Client 网络代理。 ### 序列图 #### 游戏开始 ```mermaid sequenceDiagram Server ->>+ GUI/Robot: Create Server ->>+ NetworkProxy: Start GUI/Robot ->>+ Server: Ready NetworkProxy ->>+ Server: Ready Server ->>+ Game: Init ``` #### 游戏推进 ```mermaid sequenceDiagram GUI/Robot(Remote) ->>+ NetworkClient: Operation NetworkClient ->>+ NetworkProxy: Message NetworkProxy ->>+ Server: Operation GUI/Robot ->>+ Server: Operation Server ->>+ Game: Operation Sequence Game ->>+ Server: User View Server ->>+ GUI/Robot: User View Server ->>+ NetworkProxy: User View NetworkProxy ->>+ NetworkClient: Message NetworkClient ->>+ GUI/Robot(Remote): User View Server ->>+ Game: Heartbeat ``` ### 测试 #### 游戏 ```mermaid sequenceDiagram Tester ->>+ Game: Operation Sequence Game ->>+ Tester: User View ``` ### 消息定义 #### Operation 弃牌、吃、碰、杠等动作。 #### User View 玩家可见信息。自己手牌、牌河、副露等。