Files
SoundGame/web/rhythm
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
..

节拍行者(RHYTHM)

跟随领奏的节奏游戏,纯音频。系统奏一句,你在下一小节原样跟打—— 音要对,拍点也要对。建议戴耳机(有线优先,蓝牙延迟由 Good 窗口吸收)。

玩法

  • 每个乐句 = 领奏 1 小节 + 应答 1 小节:先听系统用打击乐器演奏 2-4 个音的节奏型,然后在下一小节的相同拍点用相同手势跟打。
  • 判定:Perfect ±150ms(乐器音 + 亮音 accent)/ Good ±350ms(只播乐器音)/ Miss(手势错或错过拍点:该音符不出声 + 一声闷镲 + 震动提醒)。 判定时刻按真实触摸时刻算(引擎 immediateTap 按下即发 tap;滑动/双击按 识别延迟补偿回触摸时刻)。Miss 不中断不掉血,歌照唱完。
  • 计分:Perfect=2 / Good=1 / Miss=0,评级 S≥95% / A≥85% / B≥70% / C。
  • 连击每 16 次有震动鼓励;乐句全 Perfect 有额外震动。
  • 3 首曲目解锁制:《启程》90 BPM → 《追风》105 BPM(反拍)→ 《星爆》120 BPM (切分密集)。曲目 n 拿到 B 级以上解锁 n+1,解锁状态本地保存并同步大厅。

手势 → 乐器音

手势 乐器音 声像
单击 底鼓 kick 中央低频
双击 军鼓 snare 中央偏上
左滑 闭合镲 hat 极左
右滑 开放镲 hat 极右
上滑 高通 tom 升调感
下滑 低通 tom 降调感
长按 —(非演奏手势) Miss 反馈音 + 震动提醒

你的每次出手都会实时奏响对应乐器音——跟对了,就能听到自己在演奏。

流程

  • 首次进入:一句欢迎后进入 5 步交互教学(单击 → 左右滑 → 上滑 → 下滑 → 三音带双击),做错有纠正语音(早了/晚了/不是这个手势),同一步失败 2 次 自动跳过;全程零通过时收尾播中性句(不夸"很好");教学中下滑 = 跳过 教学(教到下滑步、临近下滑音符时除外——那时它是演奏)。
  • 选曲(二周目起):左右滑切曲目(播曲目名/未解锁提示),单击开始, 上滑听规则,下滑回大厅。
  • 结算:播报评级(含准确率档位)与连击纪录;单击 = 再来一遍(同曲), 右滑 = 下一首(需已解锁),下滑 = 回大厅(先播"回大厅"确认再跳转)。

菜单

演奏中下滑呼出(模态暂停:谱面、判定、BGM 全部冻结,BGM 断点续播)→ 单击循环选项(继续演奏/回大厅)→ 双击确认 → 上滑 = 帮助(规则 + 设置引导)。菜单打开后 1 秒去抖独占期:期内不收任何手势(防演奏途中被 弹菜单时,已在路上的手势直接穿透菜单误确认)。 注意:下滑同时是"低通 tom"的演奏手势——自下滑音符的领奏响起到判定 死线之间,下滑永远是演奏;音符刚被判定死线拖死的短窗内(识别延迟、手势 还在路上)同样按演奏处理,绝不弹菜单;仅当没有悬置、临近或刚拖死的下滑 音符时才呼出菜单。

运行

python3 -m http.server 8105 --directory /home/ubuntu/SoundGame/web
# 浏览器打开 http://localhost:8105/rhythm/ ,建议戴耳机