# 《星穹 2048 / Nebula 2048》· 权威设计文档

> 本文件是数值与机制的唯一权威来源；改动代码需同步更新此文档。
> 配套：[00-market.md](00-market.md) · [02-deploy-qa.md](02-deploy-qa.md)

## 1. 一句话玩法

竖屏太空主题 2048：拖动方向键滑动星盘，同值星核碰撞合并升阶；合到 **2048 点亮「天狼恒星」即一局胜利**（可继续冲更大恒星）；卡死前可看广告**复活一次**（移除最小星核两枚），结算看**得分翻倍**。冲最高分登上好友榜。

## 2. 核心循环

```
滑动 → 移动/合并 → （加分/升恒星）→ 卡死？
  ├─ 否 → 继续
  └─ 是 → 结算（最高分 + 点亮星星图）
            ├─ 复活(激励视频, 每局1次) → 移走最小两枚 → 继续
            └─ 结束(翻倍激励视频可选) → 分享海报 / 好友榜
```

单局目标时长 3–8 分钟；首次新手局（前 30 秒）引导层覆盖「滑动=移动」「相同=合并」。

## 3. 规则与判定

- 网格 **4×4**，星核取值 `2^1…2^11`（2 → 2048）。
- 四方向滑动：每格星核沿方向滑到尽头；相邻同值相遇 → 合并为 2 倍值，**每次合并每核只合并一次**（经典 2048 语义）。
- 得分：每次合并得 `合并后值 × 1`（即合出 2048 得 2048 分）；无移动/合并 → 无效滑动，不刷新「可滑判定」。
- 胜利判定：任意时刻出现 `2048` → 触发胜利演出（一次），继续 `continue=true`。
- 失败判定：无同值可合且已无空格 → game over。
- 最大恒星：本局达到的最大星核值（2,4,…,2048），决定结算星光等级与海报。

## 4. 星核视觉与「恒星」体系

| 值 | 名称（星图收集） | 色板（主/亮） | 特效 |
|---|---|---|---|
| 2 | 微尘 | #3b4a8f / #8fa3ff | — |
| 4 | 流星 | #2f6db3 / #7fd4ff | — |
| 8 | 蓝白星 | #3fb6e8 / #c8f4ff | 微光晕 |
| 16 | 恒星·褐 | #b06a3f / #ffc98a | 光晕 |
| 32 | 恒星·橙 | #e07a3f / #ffd0a0 | 光晕+星点闪 |
| 64 | 恒星·金 | #e6b13f / #ffe9a8 | 光晕+脉动 |
| 128 | 巨星·金 | #f2cf5a / #fff3c4 | 环光 |
| 256 | 巨星·银 | #b9c0d8 / #f2f5ff | 环光 |
| 512 | 超巨星·蓝 | #5a7bff / #cfd9ff | 环光+星点 |
| 1024 | 超巨星·紫 | #8a5cff / #d9c6ff | 环光+脉动 |
| 2048 | 天狼恒星 | #ff5ce1 / #ffc2f5 | 全屏星暴演出 |

- 色板来源：docs/01 §4（权威），渲染实现见 `game/src/render.js` 的 `TILE_COLORS`。
- 数字字号随位数缩放（2 位 → 3 位 → 4 位 三档）。

## 5. 数值设计

### 5.1 基础参数

| 参数 | 值 | 说明 |
|---|---|---|
| 网格 | 4×4 | |
| 初始 | 随机 2 或 4 两枚（2 占 90%） | |
| 每次有效滑动后生成 1 枚（2:4 = 90:10） | | |
| 得分 | 合并后值 ×1 | |
| 最大步数/局 | 无上限（由失败条件截断） | |

### 5.2 复活规则

- 每局限 **1 次**，仅 game over 且本局 ≥ 30 分时可触发（防秒退看广告）。
- 效果：移除场上**最小的 2 枚**星核（若 < 2 枚则移除全部后补 1 枚），判定失败解除。
- 记录 `usedRevive`，存档。

### 5.3 翻倍规则

- 仅结算面板触发；看广告 → 本局得分 ×2 写入历史最高分。
- 每局限 1 次（结算只出现一次，天然限次）。

### 5.4 离线星尘（M2 可选，默认关闭）

预留 `offlineReward` 接口位：离线上次 >1h → 星尘 = min(离开秒/3600 × 50, 500)，星尘可在局内换「撤销一步」×1（激励视频位备选）。V1 不开，代码留桩。

## 6. 商业化位（IAA，接入后生效）

| 位点 | 类型 | 频次限制 | 触发时机 |
|---|---|---|---|
| `ad:revive` | 激励视频 | 1/局 | 卡死时「看广告复活」 |
| `ad:double` | 激励视频 | 1/局 | 结算「得分翻倍」 |
| `ad:banner` | Banner | 常驻 | 菜单页/结算页底部（不打断玩法） |

接入说明见 [02-deploy-qa.md §4](02-deploy-qa.md)：广告位 ID 在 `game/src/platform.js` 的 `AD_SLOTS` 集中配置，上线前替换为流量主真实位 ID；未开流量主时所有位自动降级为无广告直通（复活直通 1 次免费、翻倍直通可选）。

## 7. 社交位

| 位点 | 能力 | 说明 |
|---|---|---|
| 好友排行榜 | 开放数据域 `open-data/` | 维度：历史最高分 maxScore + 最大恒星 maxTile |
| 分享海报 | `wx.shareAppMessage` + 海报图 | 结算页按钮：最高分 + 最大恒星 + 专属星图签名 |
| 定向分享 | 结算页「送给 ta 挑战」 | `shareToSpecificFriend`（M2） |
| 桌面/收藏 | `addDesktop` | 菜单页小按钮（M2） |

## 8. 存档结构（`wx.setStorageSync('nebula2048_v1')`）

```json
{
  "maxScore": 0,           // 历史最高分
  "maxTile": 0,            // 历史最大恒星
  "games": 0,             // 总局数
  "wins": 0,              // 达成 2048 次数
  "reviveFreeUsed": 0,     // 免费复活已用（未开广告时兜底）
  "bestStreak": 0,         // 连续合并最大步数（演出用）
  "settings": { "audio": 1, "fx": 1 }
}
```

## 9. 音效（程序化 WAV，见 scripts/gen-audio.js）

| 文件 | 事件 | 参数 |
|---|---|---|
| sfx/move.wav | 有效移动 | 220Hz 方波 0.05s |
| sfx/merge.wav | 合并 | 392→523 上滑 0.09s |
| sfx/star.wav | 合出 ≥256 恒星 | 784 三角 + 泛音 0.25s |
| sfx/win.wav | 2048 达成 | C5-E5-G5 琶音 0.6s |
| sfx/lose.wav | 卡死 | 196→98 下滑 0.3s |
| sfx/revive.wav | 复活生效 | 523→1046 上滑 0.2s |
| sfx/double.wav | 翻倍 | 880 双脉冲 0.15s |
| sfx/ui.wav | 按钮 | 660 方波 0.04s |

## 10. UI 布局（竖屏，设计宽 750）

```
┌─────────────────────────┐ y=0
│ ⭐ 星穹2048      [♪][?] │ 顶栏 96
│ 分数 1234   最高 9999    │ 分数带 96
├─────────────────────────┤ y=240
│  ┌──┬──┬──┬──┐          │
│  │  │  │  │  │          │ 棋盘 4×4，每格 min(w*0.42)
│  │  │  │  │  │          │ 间距 24
│  └──┴──┴──┴──┘          │
│  再玩一局  分享  排行榜   │ 底部按钮 3×1
└─────────────────────────┘
```

- 状态机：`menu → playing → (win 演出, 一次) → playing → over(结算)`
- 结算面板：本局得分 / 最高分 / 最大恒星星图 / [复活] [翻倍] [再来] [分享]
- 新手引导：前 2 步覆盖层气泡（首次）。

## 11. 设备分档

| 档 | 判定 | 效果 |
|---|---|---|
| low | `benchmarkLevel<=2` 或内存<2G | 关闭星点/环光粒子，合并特效 1 帧 |
| mid/high | 其余 | 全特效 |

粒子总数上限：low 40 / high 120（同屏同帧）。

## 12. 边界与异常

- 快速连滑：以「帧内最新手势方向」为准，单帧最多 1 次 step。
- resume 时恢复：只恢复 settings，局内状态不持久化（死亡重开）。
- 开放数据域失败：排行榜入口降级为仅我的成绩。
- 广告位不可用（未开通）：复活降级为 1 次免费，翻倍隐藏（避免假入口）。
