# Design · Merge Drop

## 核心机制锚

### 为什么选 merge 这种 action

- 已有 12 种 action 全部不是「合并」：涟漪/破坏/拖拽路径/追踪/蓄力发射/字符匹配/染色/连击维持/反弹/堆叠/拼接/放置射击
- merge 是市场验证最充分的休闲品类（合成大西瓜、Jelly Merge、Balloon Merge）
- merge 自带「进化树 / 升级感」，是最低成本的「成长」反馈
- merge 物理 + 容器溢出 = 30 秒可懂、3 分钟体验完整、复玩动力强

### 为什么 input 选「鼠标 X 瞄准 + 单击释放」而不是 hold-release

- hold-release 已被 NN=05（charge-volley）用过
- 单击释放更轻量，无需蓄力等待，节奏快
- X 轴瞄准与 04（全 XY 追踪）、10（X 轴持续追随）都不同：09 是「点位决策」而非「持续操控」

## 数值表

### 合成树（LEVELS）

| 级 | 半径 | 颜色 | 合成奖励 | 名称 |
|---|---|---|---|---|
| 0 | 14 | #ff6f9c 樱粉 | 1   | 樱 |
| 1 | 18 | #ffaa44 橙   | 3   | 橙 |
| 2 | 24 | #ffd66b 金   | 7   | 柚 |
| 3 | 30 | #7eccff 蓝   | 15  | 冰 |
| 4 | 38 | #9b6bff 紫   | 30  | 葡 |
| 5 | 46 | #42e0a0 绿   | 60  | 瓜 |
| 6 | 56 | #ff4d6d 红   | 120 | 榴 |
| 7 | 70 | #fff7c2 金白 | 300 | ★  |

数值规则：每升一级奖励大约 ×2，符合心流增量曲线。

### 物理参数

- 重力 G = 0.45 px/帧²
- 阻尼 DAMP = 0.62（碰撞反弹后保留 62% 速度）
- 横向摩擦 0.998 / 帧（无穷小但累计可见）
- 地板 FLOOR = 632
- 顶部红线 TOP_LINE = 90

### 释放冷却

- 单次释放后冷却 18 帧 ≈ 0.3 秒，防止误连击爆罐

### 初始生成分布

- 60% 0 级、30% 1 级、10% 2 级
- 保证开局轻松（小球多），后期靠合成做出大球

## 失败设计：容器溢出

### 为什么用「溢出」而不是「时间到 / 步数耗尽」

- 已有 failure：时间结算 / 错误次数 / 撞击次数 / 漏过次数 / 字符越界 / 步数耗尽 / 连击中断
- 「容器溢出」是 merge 品类天然失败条件，玩家容易理解
- 与 06 字符越界同属「满了」大类，但 06 是横向、09 是顶部 — 实质不同
- 单次结算（不需要计数），即时反馈强

### 溢出判定

- 球被生成 1.2 秒内豁免（避免新球未稳定就判失败）
- 球的瞬时垂直速度 |vy| > 1 时豁免（飞起来的瞬间不算）
- 球顶部低于 TOP_LINE-4 = 真正溢出

## 视觉哲学

- 不用图片资产（acceleration_rules：纯 Canvas 绘制）
- 每个球用径向渐变模拟 3D 光照（左上高光 + 右下暗影）
- 合成瞬间外发光环 + 18-50 粒子（按级数）
- 容器顶部红线在球接近时脉冲（120ms 周期正弦）
- 浮字（+N）上飞 + 渐隐，强化「我赚到」反馈

## 性能预算

- 50 球以内 60fps 稳定（O(n²) 碰撞 = 2500 检测/帧，可接受）
- 粒子上限不做硬截断（自然 24-40 帧生命周期）

## 数据结构

```
ball = { x, y, vx, vy, lv, r, flash, born, remove }
particle = { x, y, vx, vy, life, color }
float = { x, y, text, color, life, vy }
```

## 已知边界

- 0 级球太多时合成链反应可能瞬间清掉大半个容器（设计意图）
- 8 级球互相合成时直接消失给 500 分（防止顶级溢出）
- 没做 BGM（acceleration_rules 不强求音频）
