前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入了解王者荣耀游戏用户匹配的实现逻辑

深入了解王者荣耀游戏用户匹配的实现逻辑

作者头像
公众号-利志分享
发布2022-04-25 08:58:35
1K0
发布2022-04-25 08:58:35
举报
文章被收录于专栏:利志分享

上篇关于王者荣耀匹配的实现,我们讲了他的大致思路,这篇我会更加细节的讲解王者荣耀实现的细节。

要实现王者荣耀这个游戏的人的匹配逻辑,上篇我们说把匹配分成三个队了,单人队列,三人队列,五人队列,然后从队列里面取人组队。其实这样的思路实现是问题不大,后面我进行深入思考,需要考虑更多的细节,提高体验等问题,我们将如何实现这个匹配呢?下面我们来看,需要考虑什么问题,比如用户匹配了多次都没有匹配成功,如何通过算法,调整匹配的组队的人员的技术水平?围绕下面几个问题我们再分析一下怎么更好的实现这个匹配的功能。

1:如何处理用户匹配多次还没有成功呢?

答:如果一个用户没有匹配多次还没成功,那我们肯定要提高这个用户的匹配权重,匹配权重高的优先匹配,对应的如果出现多个用户匹配多次不成功,肯定是有其他用户出现中途退出,没有确认参赛,那这个时候需要逻辑处理那些中途退赛的用户,多少时间内不让参赛。

2:如何处理当前参与游戏人数不够的问题呢?

答:这个的话,人数不够怎么办?怎么可能王者荣耀玩的人这么少呢?目前我们来看可能基本不可能出现这个情况,但是我们代码还是需要考虑这个问题,这个时候我们就需要处理人数不够的问题,最好的方式当然就是加入机器人来玩,初期的游戏应该都是这个思路,最大了就不用考虑这样的问题了。

3:如何处理匹配人的水平问题呢?

答:关于这个,我们肯定是需要一个算法服务来判断这个用户是位于什么水平,非常高的荣耀级别肯定不能直接和低的进行匹配,如果出现这样匹配会严重影响游戏的体验,所以从逻辑实现层面要完全过滤掉这种匹配,如果人不够,则可能给一个同等水平的机器人。

这三个问题是匹配中比较核心的了,然后我们看看涉及到这三个问题,我们如何更好地来实现匹配逻辑。关于上次的匹配图,我们首先要调整的是单人匹配池和三人匹配池的队列实现,由于队列只是从里面拿数据,匹配的时候只能拿完数据,再做匹配。如果要基于分数排序,队列是不好使的。我们想想?如果用zset(有序集合)来实现是不是更加好呢?zset(有序集合)默认自带score的功能,我们正是需要这个来实现权重,我们默认从zset拿出来最大的权重的人,redis的zpopmax 正是我们需要的。从官方的看:ZPOPMAX key [count]:删除并返回有序集合key中的最多count个具有最高得分的成员。非常符合我们的实现需要。然后我们要解决匹配人的王者等级的问题,那我们需要通过不同的等级,实现基于不同等级的组成不同的zset匹配池。这个话有点绕,其实就是key的生成,加上不同等级的属性,这样不同的等级就有不同的zset匹配池,不同的等级匹配,可以在代码中控制哪几个等级能够匹配,哪些等级不能匹配,最后去拿对应能匹配的等级的zset匹配池的人去匹配即可。

最后我们贴一下这个匹配实现的逻辑图如下:

最新的更新的图地址:

https://www.processon.com/view/link/5fd56b557d9c0806f72f6282

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 利志分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档