准备使用Leancloud Play的Unity SDK配合云引擎SDK做一个多人(例如4人)回合制卡牌游戏(为方便说明,这里假设是4人版本炉石),关于匹配机制文档和案例中写的不多,所以自己根据现有知识设计了如下方案,希望听听大家意见看是否可行。
首先大架构方面,用云引擎和存储服务负责存储账号、各玩家卡组数据、天梯匹配分数和段位数、开卡包等功能。游戏具体进行是使用leancloud的play服务,第一个加入房间的玩家作为Master client,负责一切重要的游戏逻辑,各个客户端负责用户操作、动画展示。这里目前暂不使用托管Master到Lean Engine,因为不会node.js。日后可以考虑再升级为使用服务器作为Master端。
匹配方案:使用各玩家的分数段位作为匹配条件。例如默认房间大小为4,即使个在线同段位的(rank=5)的玩家匹配时,使用JoinOrCreateRandomRoom(条件rank=5)。
玩家A先加入了room1;成为该room的master随后玩家B、C、D也加入了该房间;各玩家记录roomID,用于掉线重连。
假设游戏是4人房间,Master在前3个新玩家加入时,记录该3个玩家的ID并发送event JoinRoomValid。
Master在发现重连后,根据记录的前4个player ID判断是否合法,通过event告知各客户端是否valid,如果是其他用户则踢出。
掉线用户可以按自己客户端记录的room ID重连,当重连后如果收到valid event,则说明进入房间正确。
目前已知问题
1 JoinOrCreateRoom无法设定条件;而JoinRadomRoom虽然可以设定条件,但好像无法Create,只能加入。
2 房间断线重连的方案是否可行?在有人短线后,必然会有其他正在寻找随机房间同为rank=5的用户加入进来,如何将其踢出房间?
整个方案感觉还是有些糙,不知道是否有更好的建议?谢谢!
-
创建时间
20年9月29日
-
最后回复
20年9月30日
- 4
回复
- 976
浏览
- 3
用户
- 5
链接