最近沉迷一款很火的5V5手游王者農药,它的画面精美大概是这样的:
沉迷同时,不禁想了解下「王者荣耀怎么玩的匹配算法是怎么实现的」
看了下一些网友给出的方案,大致步骤如下:
-
产生一些预匹配队伍可能是一个人匹配,也可能是两人三人先组队再匹配。
-
将这些预匹配队伍放入一个HashMap
-
根据预匹配队伍人数分类,比如4人黑店3人黑店,保存结构为Map<人数此人数下预匹配队伍List>,称为classifyTeamMap即为匹配池。
-
计算每个队伍中选手的平均积分
-
优先为4人黑店匹配,在classifyTeamMap.get(1)中找与之平均积分最接近的1人进行组队之后依次为3人,2人...匹配
-
匹配完成后,将队伍ID加入一个已匹配的HashSet中做记錄并没用从匹配池classifyTeamMap中删除匹配完成的队伍。
-
小伙伴们基本都找到队友了选出平均积分接近的两个队伍加入战场。
-
敌军还有30秒到达战场...
-
茬数据量大的时候用HashMap作为匹配池是否合适?或者说这么保存匹配池?用户未登陆的时信息保存在持久化数据库,但在匹配时又该怎么保存呢?
-
匹配完成后上诉方法并没有从匹配池中移除该队伍,匹配池会逐渐膨胀
-
正常情况下是一个玩家或者一组玩家点击匹配,僦该开始跑匹配算法即涉及到多线程问题。后果:匹配池不是想清就能清假设队伍A和队伍B刚好五人匹配上,正要将其从匹配池中移除時队伍C已读取队伍B信息,正在检查它们是否匹配这时候一旦移除就是一个妥妥的NPE。况且从HashMap中remove的成本也不低
-
数据量大,耗时小多线程数据安全,这些都是匹配系统需要解决的问题
如何设计一个王者荣耀怎么玩级别的匹配系统?
求大致思路即可有具体算法名字更好。