解析类Dota游戏天梯匹配系统的实现方式

什么是类Dota游戏的天梯匹配

玩过Dota或者LOL的人都知道 . 天梯匹配系统是一套将 玩家的实力 量化,并进行实时分配组队游戏 , 结算的系统. 旨在将单局游戏的胜率控制在50%左右.  避免出现虐菜,被暴虐,单边木桶短板效应, 实力悬殊的局面 . 以提供更好的游戏体验。

带着如上所说的目的 . 我们从技术角度聊聊这套系统该如何实现 .

系统设计

首先说量化

  量化本质上是一个利用数学公式 ax+by+cz = result求结果的过程 . abc xyz 代表各种因子(如 杀人数, 死亡数, 助攻数 ,网络线路等 ) ,得出一个具体的分数. 分数相近的人如果进行对战 . 他们胜负的概率将会无限接近50% . 比较出名的算法有ELO ,

  具体的算法我们这里不再表述 . 回到主题, 既然有一个量化的过程 , 那我们在设计系统的时候 . 需要预留两个点:

get量化值 , 对应到匹配时的分值排序

set量化值 , 对应到结算

即匹配时获取量化值 , 结算 时更新量化值 :

匹配 + 结算

再说说组队游戏

  组队对战 在前端常见的表现的形式为  开房 (不要想歪了) , 即将多个人聚合在一起 . 本质上是一个链表 , 存有先后进入关系 . 第一个进入的人开房 并开门, 人数足够后可以关门 , 即关闭房间入口 . 不足则开门,即开放房间入口. 没人了则 退房 .

即:

开房

退房

关门

开门

业务流程梳理

  终端玩家(手机/电脑) 通过互联网接入服务器 . 并发送匹配请求 , 服务器识别用户身份 . 进行匹配组队,分配房间 . 游戏结束后 , 进行结算. 更新匹配分数 .

  综上所述, 我们天梯匹配梳理的整个过程如下所示. 

Matchvs的类天梯匹配系统的实现

  Matchvs是如何提供这样的能力的呢? 这里就有必要谈到JoinRoomWithProperties这个接口了.

条件匹配

条件匹配JoinRoomWithProperties

JoinRoomWithProperties(roomProperty,userProfile)

 roomProperty是匹配标签,让开发者可以描述“玩家想进一个什么样的房间”。提供maxPlayer(房间最大人数),mode(游戏模式,默认为0),can_watch(允许观战,默认不允许)固定字段。 开发者可以自定义房间属性用于精准匹配,比如:开发者获取到玩家当前积分500,于是在roomProperty里定义“range”:“400 - 600”。服务端收到请求后,将完全按照key-value进行匹配,即将携带相同的roomProperty的玩家匹配到一起。对于上述开发者自定义内容,服务端是帮该500分的玩家找到分值波动范围100的水平相近的其他玩家。

  上面说到 如何 实现天梯式的匹配加入 , 没有说道这类房间如何创建 . 那么再说下Matchvs的另外两个接口.

CreateRoom

 场景: 游戏中允许玩家自己创建房间并设置相应规则。比如:你画我猜。房主可以踢出其他玩家,如果房主掉线或退房,则转移房主,房主转移规则按加入顺序进行转移。提供创建房间的接口用于玩家创建房间,玩家主动创建的房间和系统自动创建的房间隔离。即随机匹配(条件匹配)和指定房间匹配分离,随机匹配不能匹配到玩家创建的房间里去。

CreateRoom(roomName,roomProperty,userProfile)

 创建房间,roomName是房间名,password是密码,密码可以为空(此处考虑对外是分开两个接口还是只有一个)。roomProperty为房间属性,可被修改,只能被创建者修改。roomProperty设置固定字段“房间是否可见”,玩家创建房间后将该玩家加入房间。玩家创建的房间不能被随机加入,其它玩家只能通过“加入指定房间”进入。

GetRoomList

 获取房间列表

getRoomList(GameID,mode,roomType,roomProperty)

 获取游戏里由玩家主动创建(通过调用createRoom接口创建)的房间的列表。默认为获取指定场次的可见房间列表。可以参考详细设计里返回指定排序、指定类型列表。 客户端可以请求获取指定房间属性的房间列表,比如游戏里创建的有3人房间、4人房间,客户端可以只获取3人房间列表。3.1.5 踢除房间成员

kickPlayer

 踢除玩家

kickPlayer(roomID,userID)

 踢除玩家,开发者可以调用该接口将玩家从房间踢出。如果房间ID或者用户ID不存在,则给出对应错误信息。该接口客户端和gameServer均能使用。 在玩家创建的房间里,只有房主才能踢;MVS创建的房间不对踢除操作进行限制。

HashGet&HashSet

 而上文中提到的量化 ,以及 JoinRoomWithProperties ,那么对这个Properties, 则可以由开发者自己去开发复合游戏特色的 量化 算法.并由自己去实现 get 和 set . 也可以借助Matchvs 提供这样自定义存储 接口 , 持久化存储用户的Properties.

 将量化算法从系统设计中剥离处理 , 使得Matchvs的设计不会与具体游戏强耦合 , 又允许开发者高程度的自定义 , 不同的系统间可以良好协作 , 是一个很好的设计方案 .

流程图

上述接口调用的流程图如下:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容