# Slope Rig · 斜板引球

> 拖拽画几条斜板 → 按 GO → 看小球被重力 + 反射推进，落入篮筐 = 过关。

## 30 秒上手

1. 双击 `build/index.html`
2. 顶部绿色 BALL 点是出生位置，底部金色 GOAL 是篮筐
3. 在画布任意位置 **按住拖拽** → 画出一条橙色斜板
4. 板数达上限就不再让画；**点击已画板** = 删除重画
5. 按底部 `GO ▶` → 球从绿点掉下来，碰板反弹，目标进金筐
6. 进了 → `PERFECT!` → 按 `NEXT ➜` 下一关；没进 → `MISSED` → 按 `RESET` 重排
7. 全 6 关通完 = 通关

## 操作

| 平台 | 画板 | 删板 | 触发模拟 | 重置 | 下一关 |
|---|---|---|---|---|---|
| 桌面 | 鼠标按住拖拽 | 单击已有板 | Space 或 GO 按钮 | R 或 RESET | N 或 NEXT |
| 移动 | 单指拖拽 | 单击已有板 | GO 按钮 | RESET 按钮 | NEXT 按钮 |

右下 `2× OFF/ON`：开启模拟 2 倍速（编辑模式无效）

## 关卡

| 关 | 板数 | 难度 | 重点机制 |
|---|---:|---|---|
| 1 | 1 | 极易 | 学画板 + 看物理 |
| 2 | 2 | 易 | 学拐弯（有挡板需要绕） |
| 3 | 2 | 中 | 竖墙绕过 |
| 4 | 3 | 中 | 中央窗口对准 |
| 5 | 3 | 中高 | 双重折弯 |
| 6 | 3 | 高 | 双层窗 |

## HUD

- 左 `LEVEL X/6`：当前关
- 中 `0 / N 板`：已用板 / 最大板数
- 右 `EDIT / SIM`：模式标签（橙=编辑 / 绿=模拟）
- 顶部一行 `tip` 是本关提示

## 失败 / 通关

- 球落入篮筐 → `PERFECT!` 金色蒙板 + NEXT 亮
- 球出屏 4 边 → `MISSED · 球出屏`
- 球停在某板上速度 < 0.35 px/帧 持续 4 秒 → `STUCK · 球卡住`
- 全 6 关都通 → 在第 6 关完成后多一行 `通关 · 你赢了全部 6 关`

## 物理参数（调参点）

```js
PHYS.g          = 0.30   // 重力加速度
PHYS.restitution = 0.62  // 板弹性（0=粘, 1=完全弹）
PHYS.friction   = 0.86   // 每次反弹的能量损失
PHYS.wallRest   = 0.5    // 固定墙弹性（更弱，避免在墙之间无限弹）
PHYS.minSpeed   = 0.35   // 静止阈值
PHYS.stuckFrames = 240   // 240 帧 = 4 秒（60fps）
```

## 关卡数据（调参点）

`LEVELS[]` 数组每项含：
- `spawn:{x,y}` 出生点
- `basket:{x,y,w,h}` 篮筐矩形
- `walls:[{x,y,w,h},...]` 固定不可删墙
- `maxBoards` 玩家可放置板上限
- `tip` 中文提示

新增 / 调整关卡只需在数组里加 / 改对象。
