2015-10-17 55 views
0

我正在構建一個小型愛好網站,主要是在後端的Python和SQL,我不確定如何從概念上解決問題。多人遊戲參與者匹配3個或更多用戶

什麼是在多人遊戲中獲得三個或更多玩家匹配的有效方法?我原本計劃通過SQL語句完成大部分工作,其中每個活動播放器都被輸入到一個SQL表中,我們稱之爲活動遊戲表,表示他們想要玩遊戲。之後,我打算讓SQL活動遊戲桌執行一個觸發器功能,其中,當指定數量的玩家進入該表時,他們都被分配了一些game_ID,指定他們將被分配給特定遊戲。然後,這個game_id被用來確保所有動作在這些成員之間唯一地發生。最重要的是,如果隊列時間過長,則需要爲活動玩家設置超時觸發器。

這是一種處理此任務的有效方法嗎?我擔心這是大量的SQL數據庫命令。我最近還聽說,對常用命令使用SQL觸發器通常是不被接受的。如果這不是一個明智的方法來解決這個問題,那麼有哪些更有效/可擴展的方法來處理多人比賽的用戶匹配?請儘可能詳細地介紹算法步驟。看起來顯而易見,考慮到有多少多人遊戲存在,這個過程相當頻繁,但我真的很難找到關於如何接近它的材料或任何其他指導原則。

編輯:相關參數主要是將人們分組到他們選擇的遊戲中。其他人對匹配用戶很感興趣並且很重要,可能是技術水平,可以根據他們的贏/輸記錄權衡三名用戶被分配到相同比賽的可能性。

現在,我想知道如何處理恰好分配給遊戲的三名玩家。即使沒有考慮到用戶技能水平,如果描述算法,仍然會發現它非常有用,所以任何類型的描述都將非常感激。

+0

您需要更多的參數。例如,遊戲中是否有最小和最大數量的玩家?球員是否有相互匹配的標準(例如技術水平,地理接近度)?所有的遊戲都是通過大廳匹配還是可以創建私人遊戲?等等任何方式你切片,我不認爲觸發是要走的路。有一些定期醒來並與玩家相匹配的過程似乎是一種更好的方法。但這僅僅是基於我現在有限信息的猜測。 –

+0

我編輯了上述內容以更好地解釋相關參數。好的。我曾考慮過一些與我認爲你所提到的相似的東西。你的意思是像存儲過程?有沒有辦法,並且你會推薦一種將此與用戶生成的事件聯繫起來的方法? I.E 10名玩家突然決定玩同一類型的遊戲,一個存儲過程如何以一定的時間間隔將這些玩家分成三組?我認爲這可以通過添加到定時存儲過程的SQL語句來完成。感謝迄今爲止的建議。 – JStewy

回答

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. 很多,你會知道更多關於你的要求。
+0

非常好。謝謝。 – JStewy