# Lens Hunt · 设计文档

## 一句话定义

> 玩家通过控制圆形放大镜在密集噪点海里搜索一个目标像素，单击命中。

## 5 镜头通过分析（gameplay_principles §一）

| 镜头 | 实现位置 | 通过 |
|---|---|---|
| **L1 · 0.2s 反馈** | `main.js` `drawLens()` requestAnimationFrame 每帧重绘，鼠标移动 → 放大镜内容立刻刷新（< 16 ms） | ✓ |
| **L2 · 3s 上手** | UI 一句话提示「移动鼠标搜索 · 放大镜里有 3x 细节 · 单击疑似位置」+ 第 1 关高对比度，玩家第一次移动就能看到红色目标 | ✓ |
| **L3 · 60 局不重复** | `buildLevel(lv)` 每次随机生成 noise 位置 + 目标位置；8 关 × 8 种参数组合（颜色 / 形状 / 闪烁 / 亮度差）= 不会感到重复 | ✓ |
| **L4 · 失败有情绪** | 点错：屏幕震动 + 红光闪 + "-3s" toast；时限到：弹出"差一点 — 它就在那里"提示（不羞辱） | ✓ |
| **L5 · 再来一局钩子** | 结算屏显示评级 S/A/B/C + "+1234" 分数 + 一键再来按钮；通关后还能挑战更高分 | ✓ |

**通过率：5/5** ✅

## 难度曲线（gameplay_principles §三）

| 问 | 答 | 通过 |
|---|---|---|
| **Q1 · 第 1 局难不难** | 关 1：800 噪点 + 纯红 #FF2030 + 20s 时限。新手 5-10s 内能完成；不会 0 秒输（最少需要扫描时间） | ✓ |
| **Q2 · 第 3 局还想不想玩** | 关 3：1500 噪点 + 暗红 #AA2222。玩家发现"目标不那么显眼了"，主动放慢扫描节奏，有"我能做得更好"的钩子 | ✓ |
| **Q3 · 第 5 局有没有变化** | 关 5 引入 #7B3A2A 棕红（极接近噪点）；关 6 切到"形状区分"（方块 vs 圆点）；关 7 闪烁；关 8 1 像素亮度差。每 1-2 关引入新维度 | ✓ |

## Juice 12 调料实现清单（≥4 项）

| Juice | 实现位置 |
|---|---|
| **J1 粒子** | `main.js:spawnParticles(x, y, 14, '#ffd700')` 命中时喷 14 颗金色粒子，受重力，0.6-1.0s 消散 |
| **J2 屏幕震动** | `main.js:triggerShake(6, 0.18)` 点错时 6 px 偏移，180 ms 衰减；`stage.style.transform` 注入 |
| **J4 缩放反馈** | `main.js:state.targetScale = 1.4` 命中瞬间目标 1.0→1.4→1.0 弹性 500 ms |
| **J5 颜色闪烁** | `main.js:flashColor('rgba(255,210,90,0.55)', 240)` 命中金光 240ms；`flashColor('rgba(255,30,30,0.45)', 140)` 错误红光 140 ms |
| **J6 放大镜拖尾** | `main.js:state.lensTrail` 维护 4 帧位置历史；`drawTrail()` 以 25%/15%/8%/3% alpha 描白色圆环 |

**实现 5 项 / 最低 4 项 = 通过**

## 关卡递增表

| 关 | 噪点 | 颜色 | 形状 | 闪烁 | 时限 |
|---:|---:|---|---|---|---:|
| 1 | 800 | #FF2030 纯红 | dot | — | 20s |
| 2 | 1200 | #DD2828 | dot | — | 18s |
| 3 | 1500 | #AA2222 暗红 | dot | — | 16s |
| 4 | 1800 | #882244 紫红 | dot | — | 14s |
| 5 | 2200 | #7B3A2A 棕红 | dot | — | 12s |
| 6 | 2500 | #A04848 | **square** | — | 12s |
| 7 | 2800 | #A04848 | square | **0.5s 闪烁** | 11s |
| 8 | 3000 | #A04848 | square | — | 10s（**brightHint** 极弱光晕辅助） |

## 不做（约束声明）

- 不接图片资源（纯 Canvas 渲染）
- 不接音频（pure visual，本轮压缩范围）
- 不存 localStorage
- 不联网

## 与 dedup 4 维去重对照

| 维度 | 本轮 | 与已有 121 个原型对照 |
|---|---|---|
| input | 鼠标 X-Y 连续位置 + 单击 | 与 04-wave-rider / 07-shadow-mirror / 10-trail-spike 同方向，但 concrete「同时看放大镜内 + 屏幕全局」是 split attention 类，未有 |
| **action** | **局部放大镜 + 视觉搜索 + 隐藏目标定位** | ⭐ 513 系列首次（区别 02-pop-chain 全局连锁、05-charge-volley 瞄准发射、07-one-wash BFS 染色） |
| loop | 8 关递增 + 累计分 | 与 07/12/13 同方向 ✅ |
| failure | 时限到 / 点错 5 次双限 | 组合形式新（与 03/05/06/08 各项相似但组合不同） |

**1⭐ + 3✅ 通过 ≥3 维换题门槛。**
