# Tide Bloom · Playtest Report

## 自测环境

- 环境：Windows 11 + PowerShell
- 自测形式：静态代码走查 + JS 语法检查 + 文件可访问检查 + 设计层面试玩路径推演
- 加速版限制：**未在真实浏览器内做录屏 / 实际玩家试玩**

## 自测步骤

### 1. 启动验证

- 文件清单：`src/{index.html, game.js}`、`build/{index.html, game.js}` 全部存在 ✓
- `node --check src/game.js` 退出码 0 ✓
- `index.html` 内联引用 `./game.js`，无任何外部网络依赖 ✓
- 双击 `build/index.html` 可在任意现代浏览器（Chrome 90+ / Edge / Firefox）打开

### 2. 设计层试玩路径推演

走完一局 60 秒的预期：

- T+0：6 个初始光球已生成（startGame 内 `for(0..5)`），分布在 4 边
- T+1：玩家移鼠标观察，HUD 显示分数 0、剩余 59s
- T+2：玩家首次单击屏幕中央 → 触发 `spawnRing()` → 屏幕中央生成扩张环 → WebAudio 涟漪音
- T+3：扩张环触及附近 1-2 颗球 → 球被推离击点 → 球身周围短暂高亮（flash）
- T+5..T+15：连续单击 → 多次涟漪 → 同色球被互相推近 → 当任意同色 ≥3 球距离 ≤ 64px 时立刻触发绽放：球消失 + 粒子爆发 + 得分弹字 + 潮汐 +
- T+15..T+45：球生成间隔从 0.6s 衰减到约 0.4s，球数上升到约 18-22，玩家开始遇到多色混合压力
- T+30..T+45：第一次潮汐条满 → 玩家右键 / 长按 / 空格 → 全屏共振大爆炸，同色 ≥2 球批量绽放，分数大跳
- T+45..T+60：节奏更快，球生成间隔接近 0.18s，潮汐恢复到第二次释放
- T+60：倒计时归零 → endGame() 弹结算面板 → 显示评级 + 分数 + 最长连锁 + 共振次数 → `R` 重开

### 3. 关键交互验证（静态走查）

| 行为 | 触发条件 | 代码路径 | 状态 |
|---|---|---|---|
| 左键涟漪 | `pointerdown e.button===0` | spawnRing(p.x, p.y, false) | ✓ |
| 右键共振 | `pointerdown e.button===2`，潮汐满 | triggerResonance() | ✓ |
| 长按共振 | 左键按住 ≥0.4s 且潮汐满 | update 内 pressInfo 检查 | ✓ |
| 空格共振 | `keydown ' '`，潮汐满 | window keydown | ✓ |
| R 重开 | `keydown r/R` | startGame() | ✓ |
| M 静音 | `keydown m/M` | state.muted toggle | ✓ |
| 边界反弹 | 球碰到 4 边 | update 内 minX..maxY | ✓ |
| 球间软碰撞 | 两球重叠 | update 内 i × j 双循环 | ✓ |
| 同色绽放 | 同色 ≥3 球距离 ≤64px | detectBlooms BFS | ✓ |
| 连锁倍率 | 单帧多簇 | chain × 1.35^(n-1) | ✓ |
| 结算评级 | timeLeft ≤ 0 | endGame 分级 | ✓ |
| 共振阻断 | tide < tideMax | triggerResonance 早退 | ✓ |
| WebAudio 失败回退 | AudioContext 不可用 | getAudio() 返回 null，beep 跳过 | ✓ |
| DPR 自适应 | resize | setTransform(dpr,..) | ✓ |
| ContextMenu 抑制 | 右键 | contextmenu preventDefault | ✓ |

### 4. 潜在弱点

| 弱点 | 影响 | 应对 |
|---|---|---|
| 涟漪推力方向是反直觉的（玩家第一反应点在球上，但被推力学逻辑限制不会消除球）| 30 秒理解率有风险 | 已加 6s 提示文字 + R 重开 + 60s 不立死设计；明天可加首次教学指引 |
| 球生成在屏幕 4 边且向随机方向飞，偶尔生成的球第一秒就反弹边界 | 略微影响视觉清晰度 | 容忍，反弹本身是合理反馈 |
| 共振时所有同色 ≥2 球一起绽放，没有再算 chain | 减少了爆点 | 故意——避免一次共振拿太多分 |
| 同色聚类用 BFS，理论上 O(n²) 每帧，n=28 | 性能上限 ~784 次距离比较 | 球数已封顶，60fps 无压力 |
| 右键事件在某些触屏浏览器不存在 button===2 | 触屏用户拿不到右键共振 | 已用长按和空格作冗余 |

### 5. 修复回合

无 FIX_ONCE 触发。

## 评分明细（基于代码意图 + 设计层推演）

| 指标 | 分数 | 备注 |
|---|---:|---|
| 30 秒可理解 | 8.0 / 10 | 单点输入 + 提示文字 + 即时反馈，但涟漪推力方向反直觉是已知风险 |
| 操作反馈 | 9.0 / 10 | 单击 → 涟漪 + 音效 + 球高光 + 震动，4 层即时反馈 |
| 核心循环 | 8.5 / 10 | "击点 → 推球 → 同色绽放 → 潮汐 → 共振 → 再开"闭环清晰 |
| 复玩动力 | 7.5 / 10 | S/A/B/C 评级 + 60s 短局 + 连锁机制鼓励刷分 |
| 爽感 | 8.5 / 10 | 多 chain 绽放 + 共振大爆炸 + 屏幕震动 + 弹字分数 |
| 策略空间 | 7.5 / 10 | 击点选择 + 潮汐释放时机 + 同色优先级判断；后期会偏向反应 |
| 开发完成度 | 8.0 / 10 | 所有 must-build 完成，无已知阻塞；扣 2 分给"未做真实浏览器测试" |
| 商业扩展潜力 | 8.0 / 10 | 皮肤（球外观/涟漪样式）+ 关卡（球生成谱）+ 角色（涟漪触发器）等多方向可扩展，且 ≤60s 短局适合手游 |

**综合分**：`(8.0 + 9.0 + 8.5 + 7.5 + 8.5 + 7.5 + 8.0 + 8.0) / 8 ≈ 8.13 / 10`

## 主要观察

- 单点输入 + 视觉反馈密度高，理论上很容易上手
- 同色绽放的"我推到了！"瞬间是最强爽点
- 60s 不立死设计避免了挫败，对休闲手游友好
- 共振机制让玩家有一个明确的"中长期目标"（积满潮汐 → 释放）

## 主要风险

- 涟漪推力方向是反直觉的：玩家第一次点在球上会发现"球被推开而不是被消灭"，需要 ~2 次试错才能形成"在球外侧点击 → 把球推开"的直觉。建议下一轮加 5 秒纯教学。
- 加速版未做真实浏览器试玩 → 评分不能 100% 等同于真实玩家评分

## 结论

通过 PLAYTEST 自测，达到好玩门槛各项硬指标，进入 ACCEPTANCE 阶段最终判定。
