什么是类Dota天梯匹配,玩过Dota或者LOL的都知道,结算系统。旨在将单局胜率控制在50%左右。避免被虐、被打、单边桶短板效应、实力悬殊的情况。为了提供更好的游戏体验。出于上述目的。下面我们从技术角度谈谈如何实现这个系统。系统设计首先,定量化本质上是一个利用数学公式ax+by+cz=result得到结果的过程。abcxyz代表各种因素(如击杀数、死亡数、助攻数、网络线等)得到一个特定的分数。如果分数相近的人打架,他们输赢的概率将无限接近50%。比较有名的算法是ELO,具体的算法我们这里就不说了。回到正题,既然有量化的过程,那么我们在设计系统的时候,需要预留两点:获取量化值,对应匹配时的分数排序集合量化值,对应结算,即量化匹配时获取值,结算时更新量化值:匹配+结算再说说团战和团战。.它本质上是一个链表,具有顺序入口关系。第一个进入的人打开房间并打开门。当人够多的时候,门就可以关上了,也就是房门关上了。如果人数不够,则开门,即开房门。即:开房、结账、关门、开启业务流程。终端播放器(手机/电脑)通过互联网访问服务器。并发送匹配请求,服务器识别用户身份。组建匹配团队并分配房间。游戏结束后,结账。更新匹配的分数。综上所述,整理我们天梯匹配的整个过程如下。在Matchvs的阶梯式匹配系统的实现中,Matchvs是如何提供这样的能力的呢?这里有必要说一下JoinRoomWithProperties接口。条件匹配条件MatchingJoinRoomWithPropertiesJoinRoomWithProperties(roomProperty,userProfile)?roomProperty是一个匹配标签,允许开发者描述“玩家想进入什么样的房间”。提供maxPlayer(房间最大人数),mode(游戏模式,默认为0),can_watch(允许观看,默认不允许)固定字段。?开发商可自定义房型,精准匹配。比如开发者获取到玩家当前的分数是500,于是在room属性中定义了“range”:“400-600”。服务器收到请求后,会根据key-value进行精确匹配,即将具有相同房间属性的玩家匹配到一起。对于以上开发者自定义内容,服务器是帮助500分的玩家找到其他等级相近的玩家,分数波动范围为100。上面提到了如何实现天梯式的匹配和加入,但没有提到如何实现创造这样的房间。然后说说Matchvs的另外两个接口。CreateRoom?场景:游戏允许玩家创建自己的房间并设置相应的规则。例如:我猜你画的是什么。主持人可以踢出其他玩家。如果主机掉线或退房,则主机被转移。主机转移规则按照加入顺序转移。提供创建房间的接口,供玩家创建房间。玩家主动创建的房间与系统自动创建的房间隔离。即随机匹配(条件匹配)与指定房间匹配分离,随机匹配不能匹配玩家创建的房间。CreateRoom(roomName,roomProperty,userProfile)?创建一个房间,roomName为房间名称,password为密码,密码可以为空(这里考虑是分开两个对外接口还是只有一个)。roomProperty为房间属性,可修改且只能由创建者修改。room属性设置固定字段“房间是否可见”,玩家创建房间后加入房间。玩家创建的房间不能随机添加,其他玩家只能通过“加入指定房间”进入。GetRoomList?获取房间列表getRoomList(GameID,mode,roomType,roomProperty)?获取游戏中玩家主动创建(调用createRoom接口创建)的房间列表。默认是获取指定会话的可见房间列表。可以参考详细设计中返回的指定顺序和指定类型列表。?客户端可以请求获取指定房间属性的房间列表。比如游戏中创建了3人房和4人房,客户端只能获取到3人房列表。3.1.5踢房间成员kickPlayer踢玩家kickPlayer(roomID,userID)踢玩家,开发者可以调用该接口将玩家踢出房间。如果房间ID或用户ID不存在,则给出相应的错误信息。客户端和游戏服务器都可以使用这个接口。?在玩家创建的房间内,只有主人可以踢;MVS创建的房间不限制踢人操作。HashGet&HashSet?关于上面提到的量化和JoinRoomWithProperties,对于这个Properties,开发者可以开发结合游戏特性的量化算法,自己实现get和set。Matchvs也可以用来提供这样的自定义Storage接口,持久化存储用户的Properties。?量化算法与系统设计分离,使得Matchvs的设计不会与具体游戏强耦合,同时也允许开发者高度定制化,不同的系统可以很好的配合,是一个很好的设计方案。流程图上述接口调用的流程图如下:
