Project1

标题: 求教网络游戏竞技场的匹配算法…… [打印本页]

作者: 小湖    时间: 2013-10-31 09:29
标题: 求教网络游戏竞技场的匹配算法……
大概就是每个人有个RANK值,报名参加竞技场(可随时报名),系统将RANK值相近玩家1对1组合进行对抗,如何做可以做到最优的匹配{:2_258:}
作者: 小湖    时间: 2013-10-31 09:33
现在的做法是报名参加的人拿自己的RANK值与等待池中的RANK值比较,相等则匹配成功,否则进入等待池等待,每隔一定时间扩大自身匹配范围再与等待池中的人比较直到匹配成功。
感觉这种方法总有些问题,不是最优的……
作者: fux2    时间: 2013-10-31 11:10
rank,胜率,一起考虑吧。
这就可以让老手玩新账号也匹配到相似等级的高手。
作者: yagami    时间: 2013-10-31 20:19
一股脑加进去 做个快速排序 然后每次pop 2个出来 当(假设数组)里空掉 或者还有1个元素的时候 继续轮回
作者: 小湖    时间: 2013-11-1 08:51
yagami 发表于 2013-10-31 20:19
一股脑加进去 做个快速排序 然后每次pop 2个出来 当(假设数组)里空掉 或者还有1个元素的时候 继续轮回 ...

你的意思是不考虑玩家报名时候进行匹配,而是直接进入等待池,每隔一定时间(比如10秒),对等待池排序,然后匹配第1和第2,第3和第4,第5和第6……这样吗?
这种方法我想想过,但是恐怕同一时间服务器压力太大(因为匹配成功需要创建副本),不太好控制啊{:2_272:}
作者: 柳之一    时间: 2013-11-1 11:43
參見象棋排位賽的,電競都是和他學的
作者: yagami    时间: 2013-11-1 20:01
本帖最后由 yagami 于 2013-11-1 20:20 编辑
小湖 发表于 2013-11-1 08:51
你的意思是不考虑玩家报名时候进行匹配,而是直接进入等待池,每隔一定时间(比如10秒),对等待池排序, ...


if(time>10||countofwati>1000)
排序

快速排序的话 假设A B rank值相等 A必然先匹配 不换位置的 符合先来后到
时间 和 等待池人数 任意一向 满足条件 就进行排序 预备个容量尽可能大的等待2池(普通队列先进先出) 玩家报名 就扔到(push)2池   2池人数超过1000或者时间超过10秒 就扔min(1000,2池元素总数)个到1池(1池从2池取玩家(get)), 1池进行排序匹配




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1