多人游戏参与者匹配3个或更多用户

时间:2015-10-17 02:11:29

标签: python sql-server multiplayer online-game

我正在构建一个小型业余爱好网站,主要是后端的Python和SQL,我不确定如何从概念上解决问题。

在多人游戏中让三个或更多玩家匹配的有效方法是什么?我最初计划通过SQL语句完成大部分工作,每个活动的玩家都进入一个SQL表,让我们调用它,活动游戏表,表示他们想要玩游戏。接下来,我将让SQL活动游戏表执行触发功能,其中,当指定数量的玩家进入该表时,他们都被分配了一些game_ID,指定将他们分配给特定游戏。然后,此game_id用于确保所有操作在这些成员之间唯一地发生。最重要的是,如果队列太长,则需要为活动玩家设置超时触发器。

这是解决此任务的有效方法吗?我担心这是一个很多SQL数据库命令。我最近也听说过,对于常用命令使用SQL触发器通常是不受欢迎的。如果这不是一种明智的方式来解决这个问题,那么为多人游戏匹配进行用户匹配的更有效/可扩展的方法是什么?请详细说明算法步骤。很明显,鉴于存在多少个多人游戏,这种情况经常发生,但我真的很难找到关于如何处理它的材料或任何其他指导来源。

编辑:相关参数主要是将人们分组到他们选择的游戏中。对匹配用户感兴趣且重要的其他人可能是技能水平,其中可以根据他们的赢/输记录来衡量三个用户被分配到相同匹配的可能性。

目前,我想知道如何处理正好分配给游戏的三名玩家。我很好,并且仍然会发现它非常有用,如果在不考虑用户技能水平的情况下描述算法,那么任何类型的描述都将非常受欢迎。

1 个答案:

答案 0 :(得分:0)

将上面的对话转化为答案,存储过程正是我的想法。在我脑海中的实现中,看起来像这样:

create procedure dbo.matchPlayers
as
begin
    declare @gameID int;
    declare @players table (
       PlayerID int
    );
    while ((select count(*) from dbo.waitingPlayers) > 3)
    begin
        begin transaction;

        exec @gameID = dbo.createGame;

        update top(3) p
        set gameID = @gameID
        output inserted.PlayerID into @players
        from dbo.Player as p
        join dbo.waitingPlayers as w
           on p.PlayerID = w.PlayerID
        order by p.SkillLevel;

        delete w
        from dbo.waitingPlayers as w
        join @players as p
           on w.PlayerID = p.PlayerID;

        delete @players;
        commit transaction;
    end
end

当然,这是一个非常简单的实现,它假定您的架构有某些事情。您的架构可能有所不同。您可能希望根据以下内容更改实现:

  1. 等待少于3次怎么办?
  2. 您可以拥有更复杂的匹配条件。在这里,我匹配最近的三个。但是,并不能保证你不会让一个高技能球员与两个技术水平较低的球员相匹配。
  3. 很多,你会对你的要求了解多少。