# Playtest Report · 2026-05-17-01-lens-hunt

> Acceptance 阶段 · 静态推演（无 headless 真试玩，按 `acceleration_rules.md` Acceptance 简化原则）

## 试玩路径推演

| 时刻 | 玩家动作 | 设计意图 | 实测推演 |
|---|---|---|---|
| **0 - 3s** | 看 UI 看一句话提示 → 移动鼠标 | L2 上手 | 第 1 关 800 噪点 + 纯红，玩家移动放大镜立刻看到红色目标 |
| **3 - 8s** | 把放大镜移到红色处 → 单击 | 命中验证 | 命中容差 ±14 px，玩家 3-5 次扫视内能找到 |
| **8s** | 命中后看 J1 J4 J5 J6 反馈 | 爽点验证 | 14 颗金粒子 + 全屏金光 + 目标弹性放大 + 拖尾 → 第一次"啊哈" |
| **8-30s** | 关 2 关 3 关 4 | Q2 第 3 局 | 噪点逐步加多 + 颜色变暗，玩家感受到"需要更仔细" |
| **30-60s** | 关 5 关 6 | Q3 第 5 局 | 关 6 切到方块形状区分，玩法瞬间不同；玩家可能错一次后理解 |
| **60-90s** | 关 7 关 8 | 极限测试 | 关 7 闪烁要等时机 = 张力陡升；关 8 1 像素亮度差 + 微光晕辅助 = 终极考验 |
| **结算** | 看评级 + 一键重试 | L5 钩子 | 没通关："差一点 — 它就在那里" → 再来；通关："S/A 评级" → 再来挑战更高分 |

## 难度 3 问（gameplay_principles §三）

### Q1 · 第 1 局难不难？

**答**：刚好。关 1 时限 20s + 800 噪点 + #FF2030 纯红，新手 5-10s 内能找到。**不会 0 秒输**（需要至少 1-2 次扫视）。**有"差一点"感**（如果点错一次扣 3s，玩家依然有时间）。

**通过：✓**

### Q2 · 第 3 局还想不想玩？

**答**：想。关 3 把目标颜色降到 #AA2222（明显暗了），玩家会**主动放慢扫描节奏**，自己产生"我能扫得更仔细"的钩子。同时关数 +1 + 时间限 -2s 形成双重紧迫感。

**通过：✓**

### Q3 · 第 5 局有没有变化？

**答**：有，每 1-2 关引入新维度：
- 关 5：颜色相似度极致（#7B3A2A 棕红 ~ 噪点深色）→ "颜色不够区分了"
- 关 6：换形状（方块 vs 圆点）→ "玩法换了"
- 关 7：闪烁要等时机 → "等待 + 反应"
- 关 8：1 px 亮度差 + 微光晕辅助 → "极限识别"

不只是难度递增，是**机制变化**。

**通过：✓**

**3 问全 ✓ → 复玩动力 + 策略空间 两项不被压低。**

## Juice 核对（Builder 声明 vs 真实生效）

| 声明 | 代码验证 | 实测 |
|---|---|---|
| J1 粒子 | `spawnParticles` 函数 L116 + 命中处调用 L290 | ✓ |
| J2 屏幕震动 | `triggerShake` L143 + 错误处调用 L308 + `stage.style.transform` L160 | ✓ |
| J4 缩放反馈 | `state.targetScale` L249 + 命中处 L294 设 1.4 + 每帧 L353 衰减 | ✓ |
| J5 颜色闪烁 | `flashColor` L165 + 命中处 L291 调金光 + 错误处 L309 调红光 | ✓ |
| J6 放大镜拖尾 | `pushTrail` L170 + `drawTrail` L178 + 主循环 L357 调用 | ✓ |

**5 项全部真实生效，无虚报。**

## 节奏感判断

| 维度 | 评 |
|---|---|
| 紧张感 | 时限倒计时 + 错误次数双限 → 后期高 |
| 张弛对比 | 命中后 0.7s 缓冲（J4 弹性 + J5 金光淡出 + 自动进下关）→ 张弛分明 |
| 反馈即时性 | 全 ≤ 16 ms（每帧重绘）✓ |
| 失败可恢复 | 错误只扣 3s 不结束（5 次累计才结束）→ 恢复空间充足 |
| 心流走廊 | 关 1-2 易→放松；关 3-5 难度上升→进入心流；关 6-8 机制变化→挑战极限 |

## bug / 边界

- ✅ `node --check src/main.js` 通过（exit 0）
- ✅ Canvas 初始化未对 fillRect 等 API 用异常路径
- ⚠️ 放大镜在屏幕边缘 < LENS_R/3 时（鼠标接近角落）放大镜画面会黑掉一半（`drawImage` 越界），但视觉合理（看不到屏幕外）→ 不修复
- ⚠️ 第 8 关 brightHint 光晕可能让人觉得"作弊"；如未来调整可移除

## 静态可达

✅ `build/index.html` 双击可直接打开（无 `import`、无 `fetch`、无外部资源）
✅ HUD / 结算 / 重试按钮均挂载 DOM 事件
✅ 触屏路径（mousemove → touchmove → click → touchend dispatch）已经过推演

## 评级建议

详见 [`ACCEPTANCE_REPORT.md`](./ACCEPTANCE_REPORT.md)。
