2012-11-05 31 views
3

我目前有一款在Java中開發並運行在遊戲機上的多人紙牌遊戲。該遊戲的格式與Bridge和Spades類似,減去競標流程。這是一款四人遊戲,玩家輪流玩牌。用HTML/JS/AJAX/Java開發基於瀏覽器的多人遊戲紙牌遊戲

我目前正在努力將其轉換爲基於瀏覽器的web應用程序,並且正在添加Spring MVC,並使用HTML,JavaScript和AJAX作爲用戶界面並與後端進行通信。我對我想要採取的方法有個很好的想法,即讓單人對抗AI,允許用戶玩他們的卡,並使用AJAX調用從服務器獲取接下來的三場比賽。

但是,我想知道什麼樣的方法我需要採取這種多人遊戲。我已經看到了一些我不熟悉的「套接字編程」的參考,但這些參考似乎圍繞着Java小程序,而不是基於瀏覽器的應用程序。

基本上,我正在尋找一種方法來確保用戶開始遊戲和其他人加入時,我如何確保他們連接到同一個遊戲,並且能夠看到彼此的遊戲?我現在在爲單人遊戲開發用戶界面之前就已經問過這個問題了,因爲我想避免完全重新設計以支持多人遊戲功能。

+2

您可以使用[長輪詢](http://stackoverflow.com/questions/333664/simple-long-polling-example-code),但取決於您的服務器結構,這可能不是最好的解決方案。或者,您可以讓每個客戶端的腳本調用服務器重複查找新數據。從理論上講,你會希望每個玩家都擁有相同的「sessionID」,以便他們調用服務器。顯然你會希望這個哈希。 – Shmiddty

回答

3

由於您正在創建多人遊戲,您至少需要有一臺服務器供您的客戶端連接。既然你想使這個瀏覽器爲基礎,你很可能需要你自己的服務器(而不是讓其中一個客戶端成爲服務器)。當用戶加入遊戲時,它會登錄到該用戶所在的服務器上。當玩家執行一個動作時,服務器處理動作,然後向連接到該房間的每個其他客戶端發送通知。此時客戶端UI更新。

過去,您無法使用純HTML/JavaScript來完成此操作,因爲您無法打開套接字。這意味着,服務器無法通知客戶。但是,在HTML5中,您應該可以使用WebSockets來實現您正在使用中間服務器的功能。 The WebSocket API

但是,如果您不想使用HTML5 WebSockets,還有另一種技術可以模仿JavaScript中的套接字。也就是說,服務器可以與客戶交談。這種技術稱爲長輪詢。客戶端向服務器發送請求以請求更新,如果沒有可用更新,則服務器持有該請求,直到有更新可用並將其發回客戶端,然後再發送更新請求。 Simple Long Polling Example

另一種選擇是,如果您對Java非常熟悉,您可能希望查看Google Web Toolkit。 GWT是Java的一個子集,它被編譯成用於前端的HTML和JavaScript,並且如果需要的話,創建一個服務器端Java可執行文件,可以與TomCat或其他Web服務一起使用。在這個選項中,你有幾個庫允許你編寫將被編譯成長輪詢JavaScript的套接字式代碼。

祝你好運!

+0

謝謝你提供非常豐富的答案。我想我會用WebSocket選項,因爲它看起來像IE10將加入派對,並已找到一些很好的教程來幫助實現這一點。 我最後一點困惑就是讓遊戲保持直線。我想我會讓服務器維護一個Game對象數組(我已經創建)。我會將一個「gameId」數據成員添加到我的Game對象,並在發送和接收來自UI的每個請求時發送/接收此ID。這聽起來像是一種可行/有效的方法嗎? – SteveKerr

+0

我建議使用對每個遊戲都是獨一無二的散列gameSessionID,以及從gameSessionIDs到遊戲的併發安全地圖。由於您有多個用戶正在與服務器通話,因此併發性將非常重要。請務必閱讀如何安全地做到這一點。由於您熟悉Java,因此您可以從這裏開始:[Lesson:Concurrency](http://docs.oracle.com/javase/tutorial/essential/concurrency/) – Joe

+0

長輪詢非常適合websockets。我討厭websockets –