2011-04-13 48 views
1

我正在嘗試做一個客戶端/服務器回合基礎的遊戲。我希望這是一個雙人遊戲。我將使用Java applet作爲客戶端,以便人們可以通過瀏覽器在線播放。基於Java客戶端/服務器回合的幫助

到目前爲止我所知道的是,我可以創建一個接受所有傳入連接並創建一個線程來處理連接的客戶端的服務器。我也可以編寫連接到服務器的客戶端。我不知道的是如何讓兩個獨立的客戶端互相進行交互。

Applets不能相互通話,所以通信必須通過服務器/線程完成(我假設)。

我不是新來的Java,但我從來沒有做過任何網絡之前。有人可以幫我嗎?

回答

3

在我看來,處理這種基於回合的遊戲的最佳策略是決定一些基本的架構方法。繪製出組件和一些基本的遊戲流程圖。

您應該將大部分遊戲引擎邏輯放在服務器組件中。客戶端應保持儘可能的薄,主要側重於

  1. 通訊與遊戲引擎
  2. 接受用戶輸入
  3. 解釋的遊戲引擎響應
  4. 繪製屏幕

你服務器/遊戲引擎應該是相對無狀態的,但仍保留當前遊戲會話列表。有狀態的SOAP Web服務甚至HTTP Servlet將是一個不錯的選擇,因爲它們通過在請求中放置和讀取會話cookie來爲您保持會話。

所有的網絡都是基於請求響應的,所以它本質上是無狀態的,但某些技術(如Java servlet)將幫助您維護會話,因此您不必這樣做。不需要物理創建單獨的線程,每個請求都會導致應用程序服務器產生一個新的執行線程,而會話本質上是不穩定的。

在服務器端,我會保留會話中特定活動遊戲的所有數據。這樣,你的遊戲引擎將維持兩位玩家之間的有序溝通。

  1. 玩家1發送輪到請求的所有遊戲狀態改變信息。
  2. 遊戲引擎解釋請求,對遊戲狀態進行必要的更改。
  3. 玩家2發送頻繁的請求來檢查是否玩家2轉身。
  4. 遊戲引擎確認玩家2請求輪到它併發送新的遊戲狀態作爲迴應。
  5. 玩家2收到回覆,更新其遊戲狀態副本,記錄自上次回合以來發生的更改。
  6. 沖洗並重復。
+0

感謝您的幫助!你說的大部分內容都是有道理的,對於servlet在哪裏起作用,我只是有點困惑。 – Bthunder 2011-04-13 18:29:24

+1

Servlets基本上扮演着服務器的角色。他們被要求提供信息或信息發佈給它。這是必要的,因爲小程序不能直接相互交談。在Battle.NET上玩星際爭霸的思路。單個會話/遊戲中有很多玩家,Battle.NET是服務器。每個玩家都不斷地發送關於他們正在做什麼的信息給Battle.NET,並且作爲迴應,Battle.NET發送了關於其他玩家的更新信息。不要混淆服務器和主機。主持人只是初始化會話參數的玩家。 – 2011-04-13 18:48:10

+0

這是相當沉重的東西,所以不要灰心。在深入研究servlet之前,您需要掌握HTTP通信的基礎知識。有無數的教程在線教你如何。當你明白這個範例時,你可以研究製作簡單的servlet,即請求一個網頁,返回HTML響應。然後,您可以使用更高級的servlet,例如將Java對象序列化爲HTTP請求,並從Servlet HTTP響應中反序列化Java對象。 – 2011-04-13 18:54:47

0

你只是使用服務器作爲中間人。

  1. 客戶端A發送(寫)消息發送到服務器具有屬性表示客戶端B作爲目的地
  2. 服務器接收(讀取)的消息,並且轉發(寫入)的消息發送到客戶端B
  3. 客戶端B接收(讀出)消息。
相關問題