美文网首页
游戏中的匹配组队方法

游戏中的匹配组队方法

作者: 独行321 | 来源:发表于2018-10-01 21:58 被阅读0次

在游戏中,或者在其他需要匹配组队的需求中,常常需要从一个匹配池中寻找若干个符合条件的对象,将它们组成一队。问题在于,匹配成功往往需要两两匹配,最笨的办法就是多重循环,依次找第1个、第2个......第n个符合的对象,当队伍人数很多时,循环的层数将变得非常可怕,阅读性和扩展性都不好。

可以使用递归的方法来实现这匹配组队的过程。lua示例代码如下:

local TEAM_MEMBER_COUNT = 4  -- 匹配队伍人数

--[[
-- member_node  : 匹配池中的某个节点
-- team_members :队伍成员暂存器,成员两两匹配
--]]
function MakeTeam(member_node, team_members)
    -- 空节点表示已经遍历完匹配池
    if member_node == nil then
        return false
    end
    
    local member_data = member_node.data
    -- 当前节点的对象如果与队伍中的成员均两两匹配
    if IsMemberMatchTeam(member_data, team_members) then
        -- 加入到队伍中
        table.insert(team_members, member_data)
        -- 匹配到的队伍人数够了,退出组队
        if #team_members == TEAM_MEMBER_COUNT then
            return true
        else
            -- 人数还没够,继续组队,从下一个节点开始
            local is_match = MakeTeam(member_node.next, team_members)
            -- is_match为false代表找不到下一个匹配的对象了
            if is_match == false then
                table.remove(team_members, #team_members)
            end
            return is_match
        end
    else
        -- 继续遍历下去
        return MakeTeam(member_node.next, team_members)
    end
end


-- 使用例子
function MatchTeam(match_pool)
    local team_members = {}  -- 存储队伍成员
    local member_node = match_pool:GetFirstNode()  -- 获取匹配池头节点
    while member_node do
        local is_match = MakeTeam(member_node, team_members)
        if is_match then
            -- 匹配成功,team_members为队伍成员集合
            -- 执行组队操作
            -- 从匹配池中删除成员
        else
            -- 匹配失败
        end
        member_node = member_node.next
    end
end

注意:在遍历时我也使用递归,为什么不用担心递归太深造成栈溢出呢,这得益于lua的尾调用机制。


本文来自 duxin121 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/duxin121/article/details/82918453?utm_source=copy

相关文章

  • 游戏中的匹配组队方法

    在游戏中,或者在其他需要匹配组队的需求中,常常需要从一个匹配池中寻找若干个符合条件的对象,将它们组成一队。问题在于...

  • Dota游戏匹配的所有组合

    在Dota游戏中有一种匹配玩法,任意5人以下玩家组队,加入匹配系统,由系统组合出5人 vs 5人的组合进行游戏,比...

  • 论段位平衡的重要性

    最近发现几个很好玩的事情,暂时称之为段位不匹配导致的尴尬和不爽吧。 场景一游戏。一个组队游戏中,最怕遇到猪一样的队...

  • 全球首发 |《英雄战境》无装备无铭文,玩家更易上手。

    游戏简介: 《英雄战境》是莉莉丝首款团队竞技手游。无装备无铭文,玩家更易上手。智能审核组队资格,匹配上分胜率更高,...

  • 吐槽一下手游QQ飞车

    沉迷手游QQ飞车半年有余,发现这个游戏实在是很多槽点。 就组队道具这个模式而言,就真的让人一言难尽。匹配到的队友,...

  • 白伟日精进(2018.8.10)

    体验: 想要进入某个人的世界,就要努力让自己足以匹配他的高度,与他同频。 今天儿子拿了一个吃鸡游戏中的98k枪(游...

  • 第三波总结

    六、产品设计方法总结(点、面) 【应用内搜索设计】 以xx游戏中心为例 <1>明确索引,罗列索引 标题、tag、游...

  • 数据挖掘(异常检测)——相似度

    DataWhale 组队学习 2021.05 组队学习系列笔记四 LOF 方法是一种典型的基于密度的高精度离群点检...

  • 未重写的父类函数调用已重写的函数

    最近在写跨服组队的功能,需要重构组队匹配的代码,在开发的过程中,遇到一个父类函数中的某一步调用需要被子类重写的问题...

  • 02-01 AOP学习之execution

    execution:使用“execution(方法表达式)”匹配方法执行 execution是AOP匹配中的基础,...

网友评论

      本文标题:游戏中的匹配组队方法

      本文链接:https://www.haomeiwen.com/subject/datooftx.html