---
# System prepended metadata

title: Atama

---

# 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

玩家可见信息。自己手牌、牌河、副露等。