45 lines
2.3 KiB
Markdown
45 lines
2.3 KiB
Markdown
# 音序回响(Simon)
|
||
|
||
音频版西蒙记忆游戏。屏幕只有封面,全靠耳朵:系统用六种特征音播放一段
|
||
手势序列,玩家按同样顺序复现手势。序列从 2 个音开始,每轮 +1,播放速度
|
||
逐轮略微加快;复现错误即游戏结束,播报「坚持了 X 轮」与本局内历史最高
|
||
(数字用 TTS 片段拼接),单击屏幕重开(重开跳过教学)。
|
||
|
||
## 手势 → 音色映射
|
||
|
||
| 手势 | 音色 |
|
||
|---|---|
|
||
| 上滑 | 上行琶音(C5-E5-G5-C6 明亮弹拨) |
|
||
| 下滑 | 下行低音(A2→A1 浑厚贝斯) |
|
||
| 左滑 | E4 弹拨,声像极左 |
|
||
| 右滑 | G4 弹拨,声像极右 |
|
||
| 单击 | 短促底鼓 |
|
||
| 双击 | 两声连响(木琴质感) |
|
||
|
||
## 流程
|
||
|
||
1. 启动遮罩「轻触开始」解锁音频(游玩全程无 BGM;仅结算/菜单挂 `bgm/menu` 轻垫乐,volume 0.3)。
|
||
2. 开场教学(t0 附近插播一次 skip_hint):语音依次教 6 个手势音,教一个练一个;
|
||
教学期下滑=跳过整个教学(正练下滑手势时除外)。
|
||
3. 正式对局:报「第 N 轮」→ 播放序列(此阶段手势忽略)→ 「轮到你了」
|
||
(仅第 1 轮)→ 玩家复现;每个手势即时回声放对应音色。
|
||
4. 全部复现正确:答对反馈,进入下一轮(序列尾部 +1,速度加快,第 12 轮起 420ms 下限)。
|
||
5. 复现错误:有机会则自动消耗重听(输入阶段上滑=主动重听——免费重听每局 2 次
|
||
先用,不耗真机会;免费用尽后重听才扣机会)→ 无机会则
|
||
播报成绩与新纪录 → 单击重开(重开跳过教学)。
|
||
6. 旁白播放中单击=跳过当前句(skipVoice,链播继续);无语音时单击=各阶段原语义。
|
||
|
||
## 测试
|
||
|
||
`test/playtest.mjs` — Node 无头试玩仿真(mock 浏览器环境 + 虚拟时钟 + 种子随机),
|
||
覆盖 docs/design/13-playtest-criteria.md §3 全部关键路径与边界断言:
|
||
`tools/node/bin/node web/simon/test/playtest.mjs`
|
||
|
||
## 目录
|
||
|
||
- `game.js` — 游戏逻辑(继承引擎 `Game`,语音链用 onComplete 串行)
|
||
- `test/playtest.mjs` — 无头试玩测试(见上)
|
||
- `cover.png` — 1080x1920 封面
|
||
- `audio/{bgm,voice,sfx}/` — 全部双格式(.ogg + .m4a,iOS 回退)
|
||
- `gen/` — 资产生成脚本(SFX 合成、TTS、封面、资产校验),非运行依赖
|