# Brick Paddle · Changelog

## v0.1 (2026-05-13)

### Added
- 单文件 HTML 约 736 行（HTML + CSS + JS 全栈）
- 1080×720 逻辑分辨率 + 等比缩放铺满屏幕
- 鼠标 X 轴 + touchmove 双控制 paddle（仅一维）
- 备用键盘 ←/→ 控制（每按 28px）
- Space / Enter / 鼠标点击 / 触屏 tap 多种发球方式
- 球与 4 面墙 / paddle / 砖块的 AABB 碰撞 + 反弹
- paddle 命中点决定反弹角度（max ±72°）
- 3 类砖块：普通 (1hp) / 硬砖 (2hp) / 爆炸砖（3×3 范围）
- 关卡递增：起始 5 行 × 8 列，每关 +1 行（max 9 行）
- 球速递增：base 5.4 → max 8.5
- 硬砖率 18% / 爆炸率 8%，每关 +4% / +2%
- 2 种 powerup：Big Paddle (10s) / Multi Ball (+2)
- 同屏球数上限 6
- 砖块爆裂粒子（14 颗砖色 + 重力）
- 击碎飘字（+N 黄字）
- 屏幕震动（shake + 衰减）
- Stage 切换闪屏（青）/ 爆炸闪屏（橙）/ 失败闪屏（红）
- Stage Banner 大字弹出（"STAGE 1" / "STAGE CLEAR!"）
- Toast 提示（道具拾取 / 剩余生命）
- 介绍页 / Result 弹窗（GAME OVER + 最高分）
- HUD：SCORE / STAGE / LIVES (♥♥♥) / BRICKS / BEST
- BEST 写入 localStorage（`brickPaddle.best`）
- WebAudio 合成 7 种音效（球反弹 / 砖碎 / 爆炸 / 道具 / 失败 / 通关）
- 通关奖励 stage × 200

### Dev Notes
- 碰撞解算：计算 4 方向 overlap，取最小的轴反弹，避免穿透
- 防止球粘 paddle：反弹后强制 `b.y = paddle.y - r - 1`
- 防止球粘墙：贴边时夹紧 + 反转分量
- 爆炸砖只检查一次，受影响砖直接 alive=false，不递归避免死循环
- 多球 powerup 检查 `MAX_BALLS` 上限
- 关卡通关后 1.7s 延迟自动进下一关
- 全部图形 Canvas 实时绘制，无外部资源
- localStorage 写入用 try/catch 包裹
- touchmove 用 `passive: false` 阻止页面滚动
- 帧间 dt 上限 0.05 防止页面失焦回来时跳帧
