# Charge Volley · 设计说明

## 一句话核心
按住屏幕蓄力 + 同时瞄准 → 松开发射激光 → 击碎下落陨石 → 漏 5 个失败

## 设计哲学

### 1. 按住 + 释放 = 全新 input
与已用 4 种 input（点击/拖拽/追随/键盘）不同，「按住-蓄力-释放」是"积压感+爆发感"的天然组合。

### 2. 双重决策窗口
玩家在按住期间同时做两件事：
- 瞄准（横向移动 = 改变炮台角度）
- 蓄力（时间延长 = 威力上涨）

这种「时间+空间双轴」决策是经典街机模型。

### 3. 4 档威力 + 分级陨石
对应关系：
- S (1 威力) 杀 S (1 血)
- M (3 威力) 杀 S/M (1-3 血)
- L (6 威力) 杀 S/M/L (1-6 血) + 穿透
- XL (12 威力) 杀任意 + 多目标穿透

### 4. 难度递增
随时间，陨石速度乘 `1 + 0.04t`，间隔乘 `max(0.4, 1 - 0.012t)`。

### 5. 不做的事
- 不做关卡（无尽）
- 不做教学页
- 不做账号/商店/BGM

## 数值结构

### 蓄力档位
```
S:  300ms-1000ms,  power 1
M:  1000ms-2000ms, power 3
L:  2000ms-2500ms, power 6
XL: 2500ms+,       power 12 (自动释放)
```

### 陨石血量分布
65% S (1 血) | 25% M (3 血) | 10% L (6 血)

### 得分公式
```
score = maxHp * 50 * max(1, power - maxHp + 1)
```
- S 用 S 杀：50 分
- S 用 M 杀：100 分
- L 用 XL 杀：6 * 50 * 7 = 2100 分

奖励"小威力命中大目标"+"大威力一发清光"。

### 穿透机制
power >= 6 时激光不会被第一个目标停下，会继续穿透命中所有可清的陨石。

## 视觉

| 元素 | 实现 |
|---|---|
| 背景 | 上深下黑 + 星空粒子（向下飘） |
| 陨石 | 不规则多边形 + 渐变 + 血条 |
| 炮台 | 圆形底座 + 蓝色描边 + 橙色炮管 + 旋转 |
| 瞄准线 | 橙色虚线从炮台到屏幕外 |
| 蓄力条 | 炮台上方横条 + 4 档变色 + 档位字母 |
| 激光 | 白色长条 + 强 shadowBlur + 渐变淡出 |
| 击碎粒子 | 18 个橙色粒子 |
| 削血粒子 | 8 个绿色粒子 |
| 屏幕震动 | shake 变量 |
| 飘字 | 命中 +N、档位字母、MISS! |

## 音频

- 蓄力滴答：每 100ms 一声 sine（频率随蓄力升高）
- 发射：sawtooth 60+power*30 + triangle 800+power*50
- 命中：square 440Hz
- MISS：sawtooth 80Hz, 0.5s

## 复玩动力

1. **Best Single Hit 记录**：刷"一发清几个"的爽感
2. **5 次 MISS 节奏明确**
3. **难度递增**：每秒都更紧张
4. **威力-目标匹配**的策略性决策

## 还可扩展
- Boss 战
- 多个炮台
- 武器升级（散射/追踪/链式）
- 关卡模式
