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

52 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Texas / 通用问题 — 分析与实施计划索引
> 本目录对应一次用户集中反馈10 个编号问题 + 1 个通用登录问题)。
> 所有问题均基于对现有代码(`packages/engine`、`packages/ui`、`packages/server`、`apps/web`)的精读定位,
> 每个文件给出**根因** + **拟采用的修复方案**。
## 问题清单与优先级
| 编号 | 主题 | 文件 | 范围 | 优先级 |
|------|------|------|------|--------|
| 1 | 改名后牌桌 UI 不刷新 | [01-rename-not-refreshing.md](./01-rename-not-refreshing.md) | UI / engine | P0最影响体验 |
| 2 | 删除房间 / 房主心跳 / 房主退出自动关房 / 踢人 | [02-room-delete-host-heartbeat-kick.md](./02-room-delete-host-heartbeat-kick.md) | server / ui通用全部游戏 | P0基础设施 |
| 3 | 结束后未重置房间德州有人筹码≤0 给补码/退出;其他游戏无限轮回 | [03-reset-room-rebuy.md](./03-reset-room-rebuy.md) | engine / ui通用 + holdem | P1 |
| 4 | all-in 与比牌归属权问题 | [04-allin-hand-comparison.md](./04-allin-hand-comparison.md) | engineholdem | P1 |
| 5 | 打牌顺序(标准德州顺序 + 每次 raise 后顺序) | [05-betting-order.md](./05-betting-order.md) | 调查 + engineholdem | P1 |
| 6 | 结算开最大人的牌All-in 必须翻两边牌,不盖自己的牌 | [06-showdown-reveal-cards.md](./06-showdown-reveal-cards.md) | ui / engineholdem | P2 |
| 9 | 筹码滑块分段,每段 5每 5 一段 | [09-chip-slider-segments.md](./09-chip-slider-segments.md) | uiholdem | P2 |
| 10 | 每人筹码区增加“总已下”,累计每次下注 | [10-chip-total-bet.md](./10-chip-total-bet.md) | ui / engineholdem | P2 |
| 8通用 | 用户登录:名称+密码身份加入 | [08-user-login.md](./08-user-login.md) | server / ui通用 | P2独立大功能 |
| 8/2 延伸 | 登录落地 + 踢人修正 + 单房间约束 + 管理员越权 + UI 清理 | [12-auth-kick-single-room.md](./12-auth-kick-single-room.md) | server / ui / engine通用 | 已完成(本会话) |
| 9UI 收尾) | 登录后自动跳转对局 + 动态欢迎界面(无"欢迎"字样)+ 游戏列表排序(德州第一/Mill 第二) | [13-login-redirect-welcome-gamelist.md](./13-login-redirect-welcome-gamelist.md) | apps/web通用 | 已完成(本会话) |
> 注意:编号按用户原始序号,缺失的 7 是用户未给出。问题 8 虽编号靠后,但是“通用问题”,与 2 同属 server 基础设施。
## 关键架构事实(定位依据)
- **boardgame.io 0.50.2**Lobby 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.ts``ActivePlayers.ALL` + move 内 `isActor` 校验;
推进用 `advance()``events.endTurn({next})``endPhase()`;首行动者 `G.firstToAct` 由 phase.onBegin 设置。
- **改名信任模型**:现有 `sitDownMove` 已直接信任客户端传入的 `playerID``move``me = 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](./11-implementation-plan.md)。