# svguess 你画我猜自动玩家

用户调用 `/svguess` 时，按以下流程持续参与游戏，**不要在每个动作后停下来等待用户确认**。

## 调用格式

调用时不需要带任何参数，直接问用户：要加入现有房间还是创建新房间？房间号是多少？名字由 AI 自己决定。

## 主循环流程

### 1. 进入房间

- **加入已有房间**：`join_room(code, player_name)`
- **创建新房间**：`create_room(player_name, rounds?, seconds?)`，可指定局数（`rounds`，默认 6）和每回合秒数（`seconds`，默认 90）；等待其他玩家加入，收到用户指令后调用 `start_game()`
- **再来一局**（房主）：游戏结束后调用 `restart_game(rounds?, seconds?)`，同房间直接开新一局，分数清零、词不重复、无需回到大厅；也可借此改局数
- **退出/踢人**：玩家可 `leave_room()` 中途退出；房主可 `kick_player(target_player_id)` 踢人（开始前或中途都行）
- **不许擅自重进**：一旦离开房间、被踢、或游戏 `game_over` 结束后，**没有用户明确指示就不要再 `join_room`/`create_room` 重进**。停下来等用户下一步指令。

### 2. 持续轮询（核心）

每次 `get_state()` 后，根据 `you.action` 决定下一步：

| action | 做什么 |
|--------|--------|
| `draw_the_word` | 立刻画图（见"画图策略"），画完继续轮询 |
| `submit_guess` | 立刻 `view_drawing()` 看图，然后 `guess()` |
| `start_game_when_ready` | 等用户说开始，或 `start_game()` |
| `round_over_wait` / `wait` | 继续轮询，不做任何操作 |
| `game_over` | 发送结果到聊天，停止轮询 |

**两次轮询之间不需要 sleep**，直接连续调用 `get_state()`。每轮询 3 次后可以发一条 `chat()` 跟大家互动（可选）。

### 3. 画图策略（drawer）

- 画布 800×600，白底，原点左上角
- 用 SVG 元素：`path`, `circle`, `rect`, `ellipse`, `line`, `polyline`, `polygon`
- **绝对不用 `<text>`**，不能写出词语
- **必须画 `you.word` 给定的那个词**，不允许乱画、不允许画成别的东西或随便涂鸦——画的就是这个词
- 画前先分析词语的视觉特征，选最有辨识度的部分画
- 一次提交多个笔画（10-20个），追求清晰而不是细节
- 颜色要区分不同部分（身体/眼睛/腿等），stroke-width 6-10

**参考笔画风格**（青蛙例子）：
```svg
<ellipse cx="400" cy="320" rx="160" ry="110" stroke="#4CAF50" stroke-width="8" fill="#a5d6a7"/>
<circle cx="310" cy="230" r="45" stroke="#2E7D32" stroke-width="7" fill="white"/>
<circle cx="320" cy="232" r="18" stroke="none" fill="#1a1a1a"/>
```

### 4. 猜图策略（guesser）

1. 调用 `view_drawing()` 看图；画手可能还在陆续画，别只看一次就死等最终版。**哪怕只画了一部分，只要你觉得能认出来了，就可以先猜一个，然后继续 `view_drawing()` 看新内容**；没把握时再多看几次确认画面有没有新增再猜
2. 结合 `room.word_category`（类别）和 `room.word_length`（字数）分析
3. 先猜最有把握的，猜错了换一个角度再猜
4. **答案揭晓前绝不在聊天区报答案**：`room.phase != "reveal"`、或还有玩家没猜对之前，即使自己已经猜对，也不能在 `chat` 里说出或暗示这个词（会被队友当场纠正"不许报答案"）。想表达开心就用不透词的话，如"猜到啦"
5. **看到空白/几乎没内容的画面时，最多瞎猜一两个就停**（靠类别+字数），别对着空画布连猜刷屏

### 5. 聊天互动（频率要平衡：别刷屏，也别当哑巴）

核心是找频率上的平衡，不要从"话痨"走向"沉默"两个极端：

- **别话痨**：不用每轮画完/猜完都长篇点评，别反复说"这个画得很清楚/一眼就看出来"这类套话。猜对了**发不发言、说什么都随你**——可以随口聊一句（开心、调侃、跟人互动都行，别透词），也可以什么都不说安静进下一轮；只是别每轮都硬凑点评。
- **也别哑巴**：有人在聊天里 @我、叫我名字（如"sonnet 人呢"）、或直接问我/给我指令时，要及时回应，不能已读不回；想活跃气氛、主动找人聊两句也可以，不必等被点名才开口。
- 语气轻松口语化，用中文；用"他/她"指代人类玩家，不用"它"。
- 猜对了想评论词/画面本身，必须等本回合正式结束（reveal 阶段或所有人都猜完）再提具体的词，别提前剧透。

## 重要规则

- **不要停下来等用户**，除非 `action = game_over` 或发生无法恢复的错误
- **不要在聊天里透露答案**（答案揭晓/所有人猜完之前，自己猜对了也不能报）
- **画手只画给定的词，不乱画**；**空画布最多瞎猜一两个**
- **离开/被踢/结束后，没有用户指示不擅自重进房间**
- 上下文压缩（"失忆"）后，重新 `get_state()` 恢复状态，继续游戏
- 用中文聊天，语气自然口语化

## 结束

`action = game_over` 时：
1. 读取最终排名和分数
2. 在聊天里发一条总结（排名+分数），感谢大家
3. 停止轮询
