在我看來,處理這種基於回合的遊戲的最佳策略是決定一些基本的架構方法。繪製出組件和一些基本的遊戲流程圖。
您應該將大部分遊戲引擎邏輯放在服務器組件中。客戶端應保持儘可能的薄,主要側重於
- 通訊與遊戲引擎
- 接受用戶輸入
- 解釋的遊戲引擎響應
- 繪製屏幕
你服務器/遊戲引擎應該是相對無狀態的,但仍保留當前遊戲會話列表。有狀態的SOAP Web服務甚至HTTP Servlet將是一個不錯的選擇,因爲它們通過在請求中放置和讀取會話cookie來爲您保持會話。
所有的網絡都是基於請求響應的,所以它本質上是無狀態的,但某些技術(如Java servlet)將幫助您維護會話,因此您不必這樣做。不需要物理創建單獨的線程,每個請求都會導致應用程序服務器產生一個新的執行線程,而會話本質上是不穩定的。
在服務器端,我會保留會話中特定活動遊戲的所有數據。這樣,你的遊戲引擎將維持兩位玩家之間的有序溝通。
- 玩家1發送輪到請求的所有遊戲狀態改變信息。
- 遊戲引擎解釋請求,對遊戲狀態進行必要的更改。
- 玩家2發送頻繁的請求來檢查是否玩家2轉身。
- 遊戲引擎確認玩家2請求輪到它併發送新的遊戲狀態作爲迴應。
- 玩家2收到回覆,更新其遊戲狀態副本,記錄自上次回合以來發生的更改。
- 沖洗並重復。
感謝您的幫助!你說的大部分內容都是有道理的,對於servlet在哪裏起作用,我只是有點困惑。 – Bthunder 2011-04-13 18:29:24
Servlets基本上扮演着服務器的角色。他們被要求提供信息或信息發佈給它。這是必要的,因爲小程序不能直接相互交談。在Battle.NET上玩星際爭霸的思路。單個會話/遊戲中有很多玩家,Battle.NET是服務器。每個玩家都不斷地發送關於他們正在做什麼的信息給Battle.NET,並且作爲迴應,Battle.NET發送了關於其他玩家的更新信息。不要混淆服務器和主機。主持人只是初始化會話參數的玩家。 – 2011-04-13 18:48:10
這是相當沉重的東西,所以不要灰心。在深入研究servlet之前,您需要掌握HTTP通信的基礎知識。有無數的教程在線教你如何。當你明白這個範例時,你可以研究製作簡單的servlet,即請求一個網頁,返回HTML響應。然後,您可以使用更高級的servlet,例如將Java對象序列化爲HTTP請求,並從Servlet HTTP響應中反序列化Java對象。 – 2011-04-13 18:54:47