我正在构建一个小型业余爱好网站,主要是后端的Python和SQL,我不确定如何从概念上解决问题。
在多人游戏中让三个或更多玩家匹配的有效方法是什么?我最初计划通过SQL语句完成大部分工作,每个活动的玩家都进入一个SQL表,让我们调用它,活动游戏表,表示他们想要玩游戏。接下来,我将让SQL活动游戏表执行触发功能,其中,当指定数量的玩家进入该表时,他们都被分配了一些game_ID,指定将他们分配给特定游戏。然后,此game_id用于确保所有操作在这些成员之间唯一地发生。最重要的是,如果队列太长,则需要为活动玩家设置超时触发器。
这是解决此任务的有效方法吗?我担心这是一个很多SQL数据库命令。我最近也听说过,对于常用命令使用SQL触发器通常是不受欢迎的。如果这不是一种明智的方式来解决这个问题,那么为多人游戏匹配进行用户匹配的更有效/可扩展的方法是什么?请详细说明算法步骤。很明显,鉴于存在多少个多人游戏,这种情况经常发生,但我真的很难找到关于如何处理它的材料或任何其他指导来源。
编辑:相关参数主要是将人们分组到他们选择的游戏中。对匹配用户感兴趣且重要的其他人可能是技能水平,其中可以根据他们的赢/输记录来衡量三个用户被分配到相同匹配的可能性。
目前,我想知道如何处理正好分配给游戏的三名玩家。我很好,并且仍然会发现它非常有用,如果在不考虑用户技能水平的情况下描述算法,那么任何类型的描述都将非常受欢迎。
答案 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
当然,这是一个非常简单的实现,它假定您的架构有某些事情。您的架构可能有所不同。您可能希望根据以下内容更改实现: