比赛模式怎么做: 核心匹配规则

发表于2017-10-16
评论9 1.13w浏览

比赛模式是在线棋牌类游戏最重要的游戏模式之一,之前写过文章介绍如何安排比赛数值以达到收支平衡。

然而,笼络了一堆玩家前来参加比赛之后,要如何组织好这些玩家呢?这就涉及到系统如何将玩家组织配对,这就是比赛模式除了配平收支之外最核心的机制了。

我的另外一篇文章里介绍了目前棋牌游戏常用的几种模式,现在我们就用使用最广泛的“生存赛”为例,介绍几种常用的系统配对方式:

  • 顺序法

这是最简单的一种方法。

一般的棋牌游戏的大厅都以桌为单位,上古时代的棋牌大厅都是让玩家自行寻找位置入座,现在移动端都是系统按照玩家请求的时间,按循序将其一个个放置在桌子上。当某个桌子已满(通常以游戏人数为上线,例如麻将就是4人),则自动开启一个新的桌子迎接新入场的玩家。

这种方法实现简单,表现给玩家就是入桌的人是一个一个地入座游戏的。

但这种方法缺点也很明显:既然是比赛,玩家完全可以约定好几个人同一时间一起进入,有很大的几率被安排在同一桌,有作弊的风险。

正是考虑到了这一点,所以有一些系统采用“错位排序”的方式:

按照顺序,将玩家安排在不同的位置上,避免同时进入的玩家被安排在同一个桌子上。但这种方法指标不治本,由于不是同时进入,玩家完全可以进入之后看一下是不是自己人,不是自己人的大不了退出重新再排过。

  • 队列法

其实顺序法的问题不在于顺序,而是开始的机制,只要是玩家可以自由进出,就不能避免他们想按照自己意愿入座的行为。

所以,玩家进入比赛场之后,系统不安排其入座,先将其置入队列,等待队列人数到达一定数量后,一次性将玩家置入桌子并直接开始。

队列法应用广泛,《QQ斗地主》采用的就是这种方法。但使用队列法就需要一定的时间等待玩家填满队列,界面表现为“等待中”,表示其当前既不在大厅也不在桌子,而是在“排队”。

那么队列应该如何配置,玩家应该如何安排呢,这里就介绍一下我们用方法:

  • 预制队列

玩家进入匹配状态中,系统首先将其丢入一个队列,可以是单线程队列(仅一条),或是多线程队列(多条)。


这里简单介绍一下设置多线程队列的意义:

1、 有不少游戏是通过ELO系统(也就是LOL等游戏使用的评级系统)来评价玩家的水平的,理论上讲,评分数值越接近,玩家的水平就越接近,虽然可以通过低级场、中级场、高级场入口来分流不同水平的玩家,毕竟入口数量有限(也不可能太多),所以在进行匹配时如果根据评分设置多个区间,可以进一步细化,同水平的玩家更容易排到一起,下文也会详细介绍到。

2、 当比赛的规模大、奖励高时,对防作弊的要求也高了。作弊者时常采用的做法就是:尽可能短的时间、尽可能冷门的时间,多个账号同时涌入,为的就是能让其“自己人”同桌游戏。多个线程进一步打散了玩家,提高了作弊者的成本,降低了比赛被舞弊的风险。


当然了,多线程队列是对参加人数的规模有要求的,人数不够,线程还多,人为分流玩家,拉长了匹配的时间,造成不好的体验。

选择使用多线程队列,根据一定的标准将玩家安排进入某个队列,您可以自己定义这个标准,比如进入时间、胜率、评分、金币等,我们就先以评分为标准举例:

 

评分

1

1001~1100

2

1101~1200

3

1201~1300

4

1301~1400


  • 预制筛选

我们想象一下,如果某个游戏中所有玩家都在同一场比赛中,根据评分高低,那玩家的分布情况会如何呢?

底分玩家多,高分玩家少

进入老年期的游戏,中间多两边少 

不管是哪种分布,由于我们之前制定了1~4阶的多个线程,必然会造成某个阶人数很多一下子就匹配好了,某个阶人数很少匹配时间很长甚至迟迟不开始,那么要如何平衡这个矛盾呢?

队列法最关键的就是如何安排好匹配时间,合理的匹配时间玩家有耐心等待,同时可以让系统能更好地部署,但是一旦匹配时间过长,会造成极差的用户体验。

根据以往的经验,最理想的等待时间应该是10~15秒(对于玩家来说当然是越短越好),最好不要超过30秒,到达45秒以上乃至好几分钟就无法忍耐了。

45秒后无法忍受?其实更早就开始了 

此外,当前的在线玩家数,也对匹配时间有着影响,同等条件下,人多意味着更短的匹配时间。所以我们可以根据当前的在线人数,动态调整我们的策略,将平均匹配时间维持在30秒以下。


思路:一般情况下,高阶人数少、低阶人数多,那么当高阶人数不尽人意时,可以略微放宽条件,将其“滑入”较低档次的队列,以保证匹配时间维持在一个良好的水平。(“降维攻击”,笑)


所以,我们定制了3种方案:

严格筛选状态

玩家进入游戏场,根据其金币数量,将其置入对应的队列,等待若干秒,称为严格筛选状态

相应的容器大于若干人,则进入匹配阶段。

宽松筛选状态

玩家进入游戏场,严格筛选时间结束后,依然没有开始游戏,则将其降级到前一个级别的队列,等待若干秒,称为宽松筛选状态,若在等待时间内没有开始,则继续降级。

自由筛选状态

玩家进入游戏场,总共匹配时间超过若干秒(项目5),无论当前在哪个容器,直接将其置入最低档次的队列。

此状态称为“死线”,即匹配时间太长了,无论如何都要开始游戏了,所以也不管什么条件就匹配去吧(慎用)。


根据当前人数情况,系统自动调配当前状态,以适应当前状态的变化:

状态1

开放的线程队列、数量

状态2

严格筛选状态时间,默认10

状态3

队列进入筛选的最小人数,默认9

状态4

宽松筛选状态时间,默认10

状态5

自由筛选状态时间,默认60

状态6

是否同IP禁止

 

最后,根据当前场内的人数,进行动态调整:

人数

状态2

状态3

状态4

状态5

状态6

0-100

20

9

10

60

101-300

15

18

10

60

300-500

10

27

5

30

500以上

5

36

5

30

以上的数值只是举例,需要在运营过程中不断调配到达最优,让匹配时间和匹配度达成一个相对的平衡。

  • 匹配进行

队列布置好后,玩家陆续进入队列,队列人数满了,系统就开始配桌,玩家被安置在桌上后游戏即刻开始。


系统根据进入该队列的时间,将队列中的玩家错位排序,同一行的玩家安排在同一桌,就可以顺利开始游戏了:

1

8

15

2

9

16

3

10

17

4

11

18

5

12

19

6

13

20

7

14

21

这是一个3*X的矩阵,X3~9随机数且 3*X必须小于项目3中的数值。

3人的游戏为例子,如果4个人的游戏(如麻将)则再多加一列成为4列。


某些对作弊敏感度高的游戏,还会加入同IP限制(甚至是定位限制),符合条件的人无法被安排在同一桌。

有这种特殊条件,其实是比较难处理的,我们尝试了一种方法:当若干名玩家匹配成功后,系统检查是否存在同段IP,如果是,则保留1名同IP玩家,踢走其他同IP玩家进入队列继续排列,立即将队列候补玩家补上,如果没有候补玩家则解散所有人重新返回到队列。

这种野蛮粗暴的做法会带来不太好用户体验,所幸除了作弊者,同IP出现的情况不太多,本方法也仅供参考,慎用。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引