Files
SoundGame/web/simon
xsl ede522dda1 feat(platform/P0): 无感用户系统 + PC 键盘双端一致(两 agent 并行 + 集成收口)
用户系统(B,游戏零改动):
- POST /api/device 首访 0 交互静默建档(自动玩家一/二…,per-IP 频控);断网降级纯本地照玩
- 大厅档案切换器(切换=flush 上云→快照回灌→倒灌→服务器回拉,profileId 分桶修同设备串档;aria menu 编号可听)
- claim 可选认领(命名+scrypt PIN);旧 users/sessions 单向迁移(PIN 明文即刻哈希,已真实数据验证);login 兼容+claim-merge 桶级 LWW;logout;/server/ 静态封禁
- PUT baseUpdatedAt 守卫(legacy 放行+警告);GET 无参全桶回拉(修 7/8 游戏跨设备只 PUT 不 GET)
- web/profiles.js 分桶纯函数 + api-smoke.mjs 7/7(建档/LWW/claim-merge/迁移/频控/封禁/分桶 H1-H4)

键盘双端(A,游戏代码零改动):
- gesture.js 键盘通道 +137 行:←↑↓→/WASD=滑动、空格=单击(走 300ms 双击窗与触摸共享虚拟指针)、回车=即时 doubletap、按住空格 ≥450ms=长按;repeat 抑制/表单守卫/方向键 preventDefault
- settings.input(auto/touch/key)+ gesture.inputMode();遮罩键盘解锁与文案自适应(按空格开始/轻触开始)
- 8 游戏遮罩改用自适应默认文案;大厅设置面板「操作方式」+页脚键位提示
- live control.mjs 键盘注入通道(CDP dispatchKeyEvent);engine-input.test 61 断言

回归:12 套件全绿(8 playtest + guide + engine-voice + engine-input + api-smoke 7/7);8001 服务器已重启加载新 API,/api/device 端到端验证通过

P1 待排:153 句×双性 TTS 键盘语音变体 / 6 位配对码跨设备 / 认领 UI 打磨(research/platform/00-synthesis.md §3)
2026-09-09 23:39:23 +08:00
..

音序回响(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、封面、资产校验),非运行依赖