Skip to content

feat: 增加开房间 DEMO(桌游/组队类游戏)#59

Open
AlianBlank wants to merge 2 commits into
mainfrom
feature/feat-demo-2
Open

feat: 增加开房间 DEMO(桌游/组队类游戏)#59
AlianBlank wants to merge 2 commits into
mainfrom
feature/feat-demo-2

Conversation

@AlianBlank

Copy link
Copy Markdown
Collaborator

概述

实现 #56:为桌游/组队类游戏提供开房间方式的 DEMO。

closes #56

通用房间框架

提供完整可复用的开房间能力,任意玩法只需注册 RoomRule 并接入房间生命周期即可:

  • 房间状态机Waiting → Ready → Playing → Settling → Settled → Closed/Disbanded
  • 房间操作:创建 / 加入 / 退出 / 房主开始 / 结算 / 再来一局
  • 房间列表:按游戏类型过滤、可选包含已关闭/已解散房间
  • 连接生命周期联动:断线标记重连中、登录重连清除标记、断线超时(120s)自动退出、已关闭房间保留 10min 后清理
  • 已结算房间:玩家新建/加入房间时自动关闭旧已结算房间
  • 结算服务方法(供玩法 Agent 调用):GetRoom / EnterSettling / MarkSettled / RestartRoomGame

DEMO 玩法

石头剪刀布(2 人)

验证基础房间闭环:提交手势 → 双方都提交进入结算 → 算胜负 → 房主重开。

掷骰子比大小(3-6 人)✨新增

验证 3+ 人组队场景下 MinPlayerCount/MaxPlayerCount 的通用性:

  • 服务器端生成骰子点数(1-6),防篡改
  • 全员掷骰后进入结算,点数最大者获胜,并列时全部判胜(多胜者形态)
  • 复用房间生命周期,无额外状态机

通知策略优化 ✨

NotifyRoomChangedAsync 按受众分流,减少游戏内高频事件的全服广播:

  • 大厅可见(Created/Joined/Left/Closed/Disbanded):广播全服,刷新房间列表
  • 房间内部(Started/Settling/Settled/Reset):仅通知房间内成员

协议

用途
400 通用房间(枚举 / 房间信息 / 列表 / 创建 / 加入 / 退出 / 开始 / 变更通知)
410 石头剪刀布
420 掷骰子比大小

验证

  • dotnet build -c Release 通过(0 警告 0 错误)
  • 客户端联调(需配合客户端)

NotifyRoomChangedAsync 原先对任意变更都广播给所有在线玩家,游戏中高频事件
(Started/Settling/Settled/Reset) 会产生大量无关推送。

改为按受众分流:
- 大厅可见变更(Created/Joined/Left/Closed/Disbanded)仍广播全服,刷新房间列表
- 房间内部玩法事件(Started/Settling/Settled/Reset)仅通知房间内成员
验证通用房间框架在 3+ 人组队场景的适用性:
- GameType.DiceBattle 枚举 + RoomRule(最小3人/最大6人)
- 协议 420 段:游戏信息/掷骰/再来一局/变更通知
- 服务器端生成骰子点数(1-6),防篡改
- 全员掷骰后进入结算,点数最大者获胜,并列时全部判胜
- 复用房间生命周期: Playing -> Settling -> Settled -> 重开
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: 增加开放间的DEMO

1 participant