# Tide Bloom · 设计说明

## 一句话定义

玩家在飘满光球的水面上单击掀起涟漪，把同色光球互相推向彼此触发绽放得分，绽放积累的潮汐能量可以引爆全屏共振。

## 核心循环

```text
观察 → 选击点 → 涟漪扩散 → 推动光球 → 同色 ≥3 聚集
   → 触发绽放（得分 + 潮汐 +） → 潮汐满 → 共振大爆炸
```

## 输入

- 鼠标左键单击：生成涟漪（核心动作）
- 鼠标右键 / 长按 ≥0.4s / 空格：释放共振（仅潮汐满时有效）
- `R`：重开
- `M`：静音切换

## 系统设计

### 光球（Ball）

- 从屏幕 4 边随机方向随机速度生成
- 4 种基础色：青 / 洋红 / 金 / 薄荷
- 半径 19px
- 摩擦力 0.985^(60dt)，避免无限弹动
- 球间软弹性碰撞，避免重叠

### 涟漪（Ring）

- 单击瞬间生成
- 中心扩张，速度 540 px/s
- 最大半径 180px
- 环带厚度 36px，只有当扩张半径"扫过"球时（|d_to_center − ring_r| ≤ 36）球才被推力作用
- 同一涟漪对同一球只施力一次（hit 集合记录）
- 推力**方向**：永远指向"从击点中心 → 球"，即把球**推离击点**
- 推力**大小**：球处于环带正中（|d − r| = 0）时最大，处于环带边缘时为 0
- 这意味着玩家应"在想让球离开的方向反面"点击：想把球往右推，就在球左侧点击

### 绽放（Bloom）

- 每帧扫描全部光球，BFS 同色 + 距离 ≤ 64px 的连通簇
- 连通簇 ≥3 时触发
- 单帧多个簇触发时，每个簇是一次"chain"，分数有 chain 倍率
- 绽放结算：球消失、粒子爆发、得分弹字、潮汐 +、屏幕震动

### 潮汐共振（Resonance）

- 潮汐条 ≥ 100 时可释放
- 全屏白色巨型涟漪 + 所有同色 ≥2 球直接配对绽放
- 每个球加分 = 60
- 屏幕大幅震动 + 共振音效

### 得分公式

- 单次绽放分 = 100 × (簇大小 - 2) × 1.35^(chain - 1)
- 共振分 = 同色簇大小 × 60

## 可调参数

见 `src/game.js` 顶部 `CFG`，共 16 个参数。

## 反馈层

| 层 | 实现 |
|---|---|
| 视觉 1 | 涟漪扩张环 + 二层羽化 |
| 视觉 2 | 光球高光 + 推力命中闪一圈 |
| 视觉 3 | 绽放粒子爆发（18-44 颗） |
| 视觉 4 | 潮汐渐变充能条 |
| 视觉 5 | 共振全屏白色巨环 |
| 颜色 | 4 色饱和度高 + 同色绽放配色统一 |
| 节奏 | 分数弹字向上漂浮 |
| 物理 | 屏幕震动（连锁 ≥3 时更明显） |
| 音频 | WebAudio 合成涟漪/绽放/连锁/共振/结束 |

## 设计取舍

- 不用真实流体，只用环带 + 冲量。视觉上"像水"，物理上是"圆形 + 摩擦力"，调参成本低
- 不让球受涟漪反向吸力，避免玩家迷失因果
- 同色判定用 64px 邻接半径而不是接触，让玩家"差不多推到就行"，降低挫败感
- 球数封顶 28，避免后期太挤导致随机绽放

## 不做（防止预算溢出）

- 不做账号、联网、商城、广告、抽卡、战令、长期养成
- 不做关卡内容、剧情、复杂 AI
- 不做手柄、复杂手势
- 不做美术资产，球用 Canvas 渐变绘制
