Files
huajishe-tts/docs/texas/00-index.md
e2hang 1f1c0052da feat: 登录后自动跳转对局 + 动态欢迎界面 + 游戏列表排序
- 登录成功后调用 /api/auth/me 获取当前房间,自动切到 online 模式并定位对应游戏,
  按 name 匹配恢复用户座位与 credentials(同浏览器缓存优先复用,避免旧会话占座 409)。
- 新增 WelcomeScreen:纯 CSS 动画(漂浮棋子 + 呼吸社标 + 旋转环),不含"欢迎"字样,
  联机模式无对局时显示,登录/未登录文案不同。
- 新增 GAME_ORDER 常量,游戏下拉与默认选中改为 德州扑克(Holdem) 第一、Mill 第二、其余靠后。
- 文档:docs/texas/13-login-redirect-welcome-gamelist.md + 索引更新。

Co-Authored-By: CodeBuddy Code <codebuddy@tencent.com>
2026-08-25 14:48:23 +08:00

4.6 KiB
Raw Permalink Blame History

Texas / 通用问题 — 分析与实施计划索引

本目录对应一次用户集中反馈10 个编号问题 + 1 个通用登录问题)。 所有问题均基于对现有代码(packages/enginepackages/uipackages/serverapps/web)的精读定位, 每个文件给出根因 + 拟采用的修复方案

问题清单与优先级

编号 主题 文件 范围 优先级
1 改名后牌桌 UI 不刷新 01-rename-not-refreshing.md UI / engine P0最影响体验
2 删除房间 / 房主心跳 / 房主退出自动关房 / 踢人 02-room-delete-host-heartbeat-kick.md server / ui通用全部游戏 P0基础设施
3 结束后未重置房间德州有人筹码≤0 给补码/退出;其他游戏无限轮回 03-reset-room-rebuy.md engine / ui通用 + holdem P1
4 all-in 与比牌归属权问题 04-allin-hand-comparison.md engineholdem P1
5 打牌顺序(标准德州顺序 + 每次 raise 后顺序) 05-betting-order.md 调查 + engineholdem P1
6 结算开最大人的牌All-in 必须翻两边牌,不盖自己的牌 06-showdown-reveal-cards.md ui / engineholdem P2
9 筹码滑块分段,每段 5每 5 一段 09-chip-slider-segments.md uiholdem P2
10 每人筹码区增加“总已下”,累计每次下注 10-chip-total-bet.md ui / engineholdem P2
8通用 用户登录:名称+密码身份加入 08-user-login.md server / ui通用 P2独立大功能
8/2 延伸 登录落地 + 踢人修正 + 单房间约束 + 管理员越权 + UI 清理 12-auth-kick-single-room.md server / ui / engine通用 已完成(本会话)
9UI 收尾) 登录后自动跳转对局 + 动态欢迎界面(无"欢迎"字样)+ 游戏列表排序(德州第一/Mill 第二) 13-login-redirect-welcome-gamelist.md apps/web通用 已完成(本会话)

注意:编号按用户原始序号,缺失的 7 是用户未给出。问题 8 虽编号靠后,但是“通用问题”,与 2 同属 server 基础设施。

关键架构事实(定位依据)

  • boardgame.io 0.50.2Lobby REST 仅有 create/join/leave/playAgain/update没有 delete / heartbeat / kick
    • leave:最后一个玩家离开时 db.wipe(matchID) 删除房间(server.js:2331)。
    • update/games/:name/:id/update):只改 metadata.players[playerID].name不触碰游戏状态 G
  • 两个名字来源(问题 1 根因)
    1. Lobby metadata.players[pid].name(房间列表 pill 显示用)
    2. 游戏内 G.players[pid].name(牌桌 HoldemBoard 显示用,由 sitDownMove 写入) 二者相互独立,改名只更新了 (1)。
  • server 对象Server() 返回值)暴露 app / db / auth / router,可在 packages/server/src/index.ts 里给 server.app 挂自定义 koa 路由:
    • 删除房间:server.db.wipe(matchID)(配合 server.db.setMetadata 清 metadata
    • 心跳/在线:在 metadata 或一张内存表里记录 lastSeen[pid]
    • 踢人:复用 metadata.players[pid] 清 name/credentials + 同时在 G 里把该座位 seated=false
  • Holdem 行动权机制holdem.tsActivePlayers.ALL + move 内 isActor 校验; 推进用 advance()events.endTurn({next})endPhase();首行动者 G.firstToAct 由 phase.onBegin 设置。
  • 改名信任模型:现有 sitDownMove 已直接信任客户端传入的 playerIDmoveme = playerID ?? ctx.currentPlayer 故新增的 rename move 沿用同一信任模型即可(局域网/单机休闲场景可接受)。

实施顺序建议

  1. 基础设施server:问题 2删除/心跳/踢人)+ 问题 8 登录的账号后端 → 影响全局。
  2. UI/engine 联动:问题 1改名刷新→ 依赖 server 名字打通。
  3. 游戏内循环:问题 3重置/补码/轮回)、问题 4all-in 比牌)、问题 5顺序核实+修正)。
  4. 展示细节:问题 6亮牌、问题 9滑块分段、问题 10总已下
  5. 登录前端:问题 8。

详见 11-implementation-plan.md