2012-05-22 49 views
1

我的朋友們用java開發了這款遊戲,他們讓我爲它做多層遊戲。它像小行星一樣是側面滾動的射手。我知道它將不得不處理套接字,並且id更喜歡使用tcp over udp來建立一個連續的連接,並且不會有來回的數據集羣。我有一個從客戶端到服務器來回發送字符串的原型類型。但是我將如何實現這個遊戲?我會將船的x和y座標發送給主辦遊戲的遊戲,然後發回其他遊戲座標?任何幫助將不勝感激先進的謝謝你。用於側面滾動空間射擊遊戲的Java遊戲服務器

+2

對於像你這樣的小項目,讓客戶做大量的計算可能是好的,但一個好的建議是:永遠不要相信客戶!您可以從客戶端收到的所有數據都可以僞造。 –

回答

2

我會爲你的遊戲建議這個結構:

  • 創建一個託管遊戲並進行計算的服務器。
  • 讓服務器創建並處理在屏幕中移動的對象(內部對象)。這樣你只需要發送數據服務器 - >客戶端來更新用戶界面。
  • 對於太空船來說,服務器必須同時更新所有的客戶端,所以在客戶端,每次有移動時都會將x,y座標發送到服務器,然後向每個玩家播放新的位置。拍攝或客戶端生成的任何其他事件也是如此。
  • 當兩個物體發生碰撞時(例如激光和敵人),應該由服務器處理,具有物體和船位。

客戶將只需要閱讀的對象座標,畫出他們派軍艦/激光位置服務器。
服務器將生成對象並將其位置發送給所有客戶端。同時閱讀船舶位置和更新用戶界面。

發送/讀取數據可能很難。有幾種方法可以做到這一點,並取決於您現在更容易理解的內容。稍後可以改進。

  • 在整個遊戲過程中服務器不斷髮送對象的位置。
    如果屏幕上的對象數量不總是相同,請發送一個字符串,其中包含此刻對象的數量+其座標。客戶端使用您之前指定的編號循環通過這些座標。
  • 同樣適用於船舶。我想這些將是一個固定的數字,所以你可以發送他們的座標。
  • 在字符串內部,座標應該被一些東西隔開,這樣您在接收時就可以讀取它們。
    一個辦法這樣做是將它們與特定的字符
    "x1,y1;x2,y2;x3,y3;x4,y4; ..." 
    ("," between x-y and ";" between sets of coordinates)
    分開,或者因爲您要發送String,他們用相同的字符ammount的總是寫(比如4)
    "0012054201620104" (x1: 12 , y1: 542 ; x2: 162 , y2: 104)
  • Finaly我建議一個頭添加到每個你發送的數據包,知道它是對象列表的座標還是船舶座標列表。
0

那麼,這能以幾種方式來完成, 讓我們說我們有對象: - Space_1,Space_2,.... Space_n作爲航天物體

隨着比賽的進行,屏幕將被填充與宇宙飛船對象 每次你將得到的x,y在遊戲 所有space_x要素的協調,你也把你的協調

所以遊戲在客戶端機器將有 - 點1(X, y)你的座標 - point_2 .... point_n(x,y)其他太空工藝品(你) [R對手) - 每次刷新×時間,Y對手改變

你會處理空間飛行器的拍在你的本地應用程序 比方說,你開槍打space_3 您將發送到服務器space_3因此將該船標記爲已在服務器中死亡 當其他客戶端(其他用戶/玩家)從服務器獲取刷新呼叫時,所有人都將看到space_3已被擊中

希望這有助於如果它太抽象了

+0

所以在我建立了我的printwriter和bufferread之後,我寫下了船1的位置並同時讀取了船2的位置?然後在下一幀畫船隻並再次讀寫?會這樣嗎? – UnbrandedTech

+0

我必須從代​​碼中獲得更多信息才能做出更加自信的假設,但基本上可以,這將是一個很好的解決方案 您可能必須對與服務器的通信進行一些性能調整 –