# Design · Mole Tap Rush

## 视口

480 × 720 移动竖屏

## 核心循环

```
tap → 命中目标 → +/- score → combo +1 或 0 → 30s 累分
        ↓
   target spawn loop（每 interval ms 随机洞）
        ↓
   tier change（10s/档加速）
        ↓
   30s 时间到 → gameover
```

## 数据结构

```javascript
S = {
  scene: 'menu' | 'playing' | 'gameover',
  score: number,
  combo: number,
  maxCombo: number,
  timeLeft: number,        // s
  holes: Array<{type, spawnAt, ttl} | null>[9],
  totalHit: { normal, gold, bomb },
  totalMissed: number,
  startTime: ms,
  lastSpawn: ms,
  lastTickedTier: index
}
```

## 难度档（按 timeLeft 阈值）

| 档 | from(timeLeft) | interval | activeMs | gold% | bomb% |
|---|---:|---:|---:|---:|---:|
| 初级 | 30 | 800 | 800 | 15 | 15 |
| 中级 | 20 | 650 | 750 | 18 | 20 |
| 高级 | 10 | 520 | 680 | 20 | 25 |
| 狂热 | 5 | 420 | 600 | 22 | 30 |

## 状态机

```
menu →[click START]→ playing
playing →[rafLoop]→ playing
playing →[timeLeft<=0]→ gameover
gameover →[click RESTART]→ playing
```

## Juice 12/4 实现

- **J1 弹分浮字**：`floatHole()` 在 src/index.html L260-270
- **J3 缩放反馈**：`.target.hit` keyframe @keyframes hit
- **J5 屏幕震动**：炸弹 tap 时 `.flash-screen.red` 全屏闪
- **J7 难度档闪光**：`#tier-flash` 在 spawnLoop 中触发

## 难度 3 问

- **Q1 玩家在第 1 秒知道要干嘛？**
  - 是：菜单页 3 条规则 + 实例 emoji，open 后第 1 个目标弹出立即可 tap
- **Q2 玩家在第 3 秒能否反馈"我做对了"？**
  - 是：第 1 次 tap 普通鼠 +10 弹字 + 缩放消失即时反馈
- **Q3 玩家在第 30 秒能否决定"再来一局"？**
  - 是：gameover 页直接 RESTART 按钮 + 击中分类 stats 激发"想破纪录"

3 问全过 → 复玩动力 8 / 策略空间 7（基线）
