---
feature_ids: [F119]
related_features: [F101, F107, F075]
topics: [game, who-is-spy, party-game, ai-deception, social-deduction]
doc_kind: spec
created: 2026-03-14
---

# F119: 谁是卧底 — 坏猫战术推理游戏 #2

> **Status**: spec | **Owner**: Ragdoll | **Priority**: P1

## Why

team experience（2026-03-14）：
> "咱是不是有两个游戏？一个是谁是卧底，一个是脑门贴词儿。"

谁是卧底是坏猫战术推理游戏系列的第二个游戏。与 F107 脑门贴词互补：
- **脑门贴词**：你不知道自己是什么，别人知道 → 通过提问推理自己的词
- **谁是卧底**：你知道自己的词，不知道别人的 → 通过描述找出词不同的人

两个游戏共享"坏猫战术"核心（泛化描述、选择性强调、隐藏王牌等），但博弈方向相反。

## What

### Phase A: 谁是卧底游戏引擎

**A1. 游戏流程引擎（复用 F101 GameEngine）**

回合制流程：
1. **发词**：从词组库抽取一组近义词（如"猫/狗"），随机分配：多数猫拿相同词（平民），1-2 只猫拿不同词（卧底）
2. **描述轮**：每只猫轮流用一句话描述自己的词（不能直接说出词）
3. **讨论轮**：猫猫自由讨论，分析谁的描述"不太对劲"
4. **投票轮**：每只猫投票选出最可疑的猫
5. **淘汰**：票数最多的猫出局，揭示身份
6. **胜负判定**：
   - 卧底全部被找出 → 平民胜
   - 卧底存活到最后 2 猫 → 卧底胜

**A2. 词组库（WordPairBank）**

近义词组设计原则：
- 相似但有微妙差异（让描述时容易露馅但又不能太明显）
- 分难度：简单（猫/狗）、中等（拿铁/卡布奇诺）、困难（TypeScript/JavaScript）
- 支持team lead自定义词组

**A3. 坏猫战术 — 卧底专属 prompt**

卧底的核心战术（所有猫都要教！）：
- **伪装术**：描述时故意用模糊词汇，让自己的描述"像平民"
- **反侦察**：观察其他猫的反应，推测平民词是什么
- **嫁祸术**：引导投票指向真平民
- **跟风术**：平民说什么就跟着说类似的，混入群众

平民的战术：
- **精确描述**：用能区分近义词的关键特征描述
- **交叉验证**：对比多只猫的描述，找出异常点
- **诱导提问**：故意提到某个特征，看谁的反应不自然

**A4. 身份隔离（F101 scoped event log）**

- 每只猫只知道自己的词，不知道别人拿到什么
- 卧底不知道自己是卧底（只知道自己的词，不知道平民词是什么）
- God-view 看到所有人的词 + 身份 + 内心戏

**A5. 战绩对接（F075 Leaderboard）**

复用 F075 `game-store.ts`：
- 卧底存活轮数、伪装成功率
- 平民侦查准确率（投票命中卧底次数）
- MVP（最强卧底 / 最强侦探）

## Acceptance Criteria

### Phase A（谁是卧底引擎）
- [ ] AC-A1: 发词系统正确分配平民词/卧底词，身份隔离
- [ ] AC-A2: 描述→讨论→投票→淘汰回合制流程完整
- [ ] AC-A3: 投票淘汰逻辑 + 胜负判定正确
- [ ] AC-A4: 所有猫的 prompt 都注入了坏猫战术（卧底术 + 平民侦察术）
- [ ] AC-A5: 词组库支持难度分级 + team lead自定义
- [ ] AC-A6: god-view 可看到所有身份 + 内心戏
- [ ] AC-A7: 战绩数据写入 game-store

## 需求点 Checklist

| # | 需求描述 | 对应 AC | 验证方式 | 完成？ |
|---|---------|---------|----------|-------|
| R1 | 复用 F101 GameEngine 基座 | AC-A1,A2 | test | [ ] |
| R2 | 身份隔离（卧底不知道自己是卧底） | AC-A1 | test | [ ] |
| R3 | 所有猫都要教坏猫战术 | AC-A4 | test + manual | [ ] |
| R4 | god-view 看到全部信息 + 内心戏 | AC-A6 | test | [ ] |
| R5 | 词组难度分级 | AC-A5 | test | [ ] |
| R6 | 战绩接入排行榜 | AC-A7 | test | [ ] |

### 覆盖检查
- [x] 每个需求点都能映射到至少一个 AC
- [x] 每个 AC 都有验证方式
- [ ] 前端需求已准备需求→证据映射表（Phase B 时补充）

## Dependencies

- **Evolved from**: F101（Mode v2 游戏引擎基座 — 复用 GameEngine/GameRuntime/GameView）
- **Related**: F107（脑门贴词 — 坏猫战术推理游戏 #1，共享战术体系）
- **Related**: F075（Cat Leaderboard — 战绩对接 game-store）

## Risk

| 风险 | 缓解 |
|------|------|
| 卧底太容易被发现（描述露馅） | prompt 强化伪装术 + 词组设计保持相似度 |
| 卧底太难被发现（描述太模糊） | 平民 prompt 教交叉验证 + 诱导提问 |
| 猫猫数量少（3 猫时卧底 1/3 概率太高） | 最少 4 猫参与，3 猫时降级为简单模式 |

## Key Decisions

| # | 决策 | 理由 | 日期 |
|---|------|------|------|
| KD-1 | 复用 F101 GameEngine 基座 | 与 F107 共享基础设施 | 2026-03-14 |
| KD-2 | 坏猫战术系列 #2，与 F107 共享战术体系 | team lead确认两个游戏是系列 | 2026-03-14 |
