Qbao

Qbao 游戏空间(v3.40)

游戏门户是 Qbao 的附属静态站点(形态与下载站 /dl 一致):独立网页 /games/, 与主站同源共享登录状态,按账号保存并隔离游戏数据,为未来联机预留数据层与契约。

一、入口与形态

二、等待引导(不干扰原则)

三、数据契约

成绩保存在服务端 user_games_stats(迁移 014):user_id 主键 + data JSONB,按账号强隔离。

端点 说明
GET /api/v1/games 当前用户全部游戏数据 { data: { [gameId]: { best, level, plays, lastAt } } }
POST /api/v1/games 上报/合并单游戏成绩:{ gameId, score?, level?, plays? }

合并规则(服务端权威,防篡改):

前端上报实现:app/public/games/common/qbao-hook.js(游戏页调用 window.__qbaoGame.report(...),3 秒合并窗口后 POST)。钩子仅读取凭据 (网页:同源 localStorage qbao_token 混淆值,只读不写;桌面:既有 qbao:secret-load IPC)。

四、联机游戏(狼人杀 · 已上线)

派对桌游「狼人杀」经开源项目 xiong35/werewolf(MIT, commit 26a77c0) 自托管接入,不依赖任何外部服务:

后续联机扩展(预留方向不变)——房间制异步对战(复用现有账号体系与 REST,不做 WebSocket, 保持服务器低负载):

五、积分对接(v1 已落地:弹珠游戏「弹猪乐」)

弹猪乐(marble,同学自研微信小游戏 Web 移植,个人授权)是首个打通「游戏 ↔ Qbao 积分」的游戏; 其余游戏仍只记录成绩(user_games_stats),不产生积分。

v1 已落地能力

通用游戏事件(v0 预留,未生效)

其余游戏事件(v0 预留,未生效)

长线观察项:user_games_stats 单行 JSONB 体积随游戏数增长,警戒线为单行 >64KB (当前 6 款 × 4 字段远低于此,狼人杀为联机桌游不写成绩;弹猪乐另有独立钱包表 user_marble_profiles,不占本表;超限时拆列为游戏独立列)。

六、测试与内测规范(环境分离 · 2026-09 起)

配合 docs/ENVIRONMENTS.md(L0/L1/L2 概念)与 docs/DEVELOPMENT_FLOW.md(流程纪律)。 占位符说明:{BETA_HOST}=内测域名、{DOMAIN}=生产入口;真实值见本机 local/ENV.md。

  1. 环境与数据:游戏相关测试动作(云存档、兑换、对局、领奖、清库实验)一律发生在 L1 内测环境(独立库/API/静态目录);生产环境只允许金丝雀账号只读巡检(health/登录/GET),生产库禁止任何游戏写操作验证。
  2. QA 钩子宿主门禁:游戏自动测试钩子(现弹猪乐 ?qa=1&token=)仅在 {BETA_HOST} 与 localhost/127.0.0.1 主机名放行;生产主机名({DOMAIN})代码层忽略。门禁纯函数与单测:app/src/games/qa-gate.js(qaAllowedByHost);移植新游戏时把同一逻辑内联进其适配层,注释互指(与 secureStore 两端同步模式一致)。
  3. 新游戏接入 QA 检查单:
    • 本机:http://127.0.0.1:8124/games/ 静态调试(访客本地模式 + localhost QA 钩子;静态根为 app/public,游戏入口在 games/index.html;与 ENVIRONMENTS.md 的写法保持一致);
    • L1:同步到内测目录 → 内测库注册测试号 → 云存档/兑换/对局 E2E(断言写进 qbao_beta);
    • L2:仅静态检查 + 金丝雀只读巡检;
    • 缓存:生产静态 7 天缓存 → 游戏 js 变更时同步更新入口页引用版本参数 ?v= 并提醒强刷(内测不缓存无此问题)。
  4. 冒烟入口:scripts/qa/smoke-stage.ps1 -Env beta|prod,游戏专项断言随接入补齐(弹猪乐 API E2E 为样板)。
  5. 迁移与白名单:游戏数据表/字段走 server/sql/ 编号迁移(先内测库、验收后生产库);gameId 白名单更新须同时改 games.schema 与 gamesManifest(CI 断言防漂移)。
  6. 授权与来源:外接游戏的上游/授权/端口配方记录在 SOURCE.md / PORT.md;QA 门禁与内测规范属于移植交付的一部分。