2017-12-04 13 views
1

私はTwo Dice Pigというゲームをjavaで作った。ゲームには、2つのダイスフェイスと、プレイヤーのスコアと名前の両方を表示するシンプルなGUIインターフェイスがあります。ゲームは、両方のプレイヤーの名前を尋ねる簡単なダイアログメッセージで始まり、ゲームが始まります。両方のプレイヤーは、1つのGUIインターフェイスだけで対話し、順番に再生されます。ゲームは完全にコード化されています。さて、私が望むのは、サーバーを(For now I want to try it on my local server)にして、両方のプレーヤーが独自のGUIを取得することです。そして、プレーヤーAがプレーしているとき、プレーヤーBはインターフェイスで何もすることができません。私はそれがクリアすることを望む。それは私のネットワーキングプロジェクトですが、どうやってそれを行うのか分かりません。どんな助けでも大歓迎です。TCP - localhostサーバー上の2人のプレイヤー間でJavaゲームをする方法

Note: I want to apply the same idea asthisman applied. Just watch only for 15 seconds. Thanks!

+0

あなたは、ほとんどのコントローラを更新する必要があるため、私は...あなたはMVCを使用している願っています完全にサーバー通信を可能にします。もちろん、何も試していないと、私は本当に助けることができません。 See [ask]。 – AxelH

+0

@AxelH私はそれについて多くを読んだ。そして、たくさんのチュートリアルを見ました。だから、私は完全に空白ではない。コードは完全にコード化されています。しかし、私はちょうど2人のプレイヤーがローカルサーバー上でプレイしたいと思っています。あなたはまた、相当なリンクを参照することができます。ありがとう – SHEIKH

+0

クライアントがログして一緒に話すことを可能にするシンプルなサーバーの実装を開始してください。アイデアを入手してロジックを更新することができます。あなたが持っているものから、私はSOがリンク、チュートリアル、ガイドを提供するように作られていないので、私は助けることができません...しかし、既存の問題に役立ちます。開始のためにソケットを使用する方法を参照 – AxelH

答えて

0

あなたは "休憩のJavaとサービス" や、このような何かをグーグルで開始する必要があります。

あなたは2つのアンドロイドゲームセッションのゲーム状態を管理するいくつかの中央コンポーネントが必要です。たとえば、のようなURLがあります。ここでは はPOSTとなります。他の誰かがそのリソースをGETにすると、あなたはゲーム中に掲示した投げられたサイコロを取り戻すことができます。 プレイヤーが対話できないようにするには、プレイヤーがそれを行うことができないときにプレーヤーをPOSTにすることを禁じることができ、GUIは何とかそれを反映するはずです。ダイスなどを掲示した後にボタンを無効にする可能性があります。

これ以上のことはありますが、これは何とか始めるべきです。

https://docs.oracle.com/javaee/6/tutorial/doc/gilik.html

上記のURLから重要なコード部分は、このようなハロー世界のようになります。マルチプレイヤーゲームを作る

package com.sun.jersey.samples.helloworld.resources; 

import javax.ws.rs.GET; 
import javax.ws.rs.Produces; 
import javax.ws.rs.Path; 

// The Java class will be hosted at the URI path "/helloworld" 
@Path("/helloworld") 
public class HelloWorldResource { 

    // The Java method will process HTTP GET requests 
    @GET 
    // The Java method will produce content identified by the MIME Media 
    // type "text/plain" 
    @Produces("text/plain") 
    public String getClichedMessage() { 
     // Return some cliched textual content 
     return "Hello World"; 
    } 
} 
+0

あなたの応答に感謝します。実際、私は[this](https://youtu.be/aIaFFPatJjY?t=1s)youtube tutorialから得た簡単なアイデアを自分のゲームに適用したいと思っています。ほんの15秒間だけ見ると、私が探しているもののアイデアが得られます。どうすればいいのか教えていただければ幸いです。 – SHEIKH

+0

Socketクラスを使用した人のように見えるhttps://docs.oracle.com/javase/7/docs/api/java/net/Socket.html 基本的な考え方は、そのソケットにメッセージを送信し、それに応じてメッセージを処理することです。しかし、あなたがインターネットを通じてそれを再生したい場合、これはオプションではない、私は言うだろう。 – Simons0n

+0

はい、あなたは私の意見を持っています。今のところ、私はちょうどこれのようにそれをしたいです。あなたは何かを参照してそれを完了させることができますか? – SHEIKH

0

は簡単な作業ではありません。初めからマルチプレイヤーコードを書いているとは思わないので、ほとんどのコードを書き直す準備をしてください。

方法1::ダムクライアント

ゲームロジックのほとんどは、サーバーで実行する必要がありますここでは、2つの異なる戦略があります。クライアントは、サーバーが何を伝えたかを表示します。また、サーバーにコマンドを送信してゲームの状態を変更します。

例:

  • プレイヤーXは、ロール上のサイコロのボタンをクリックします。
  • クライアントXがサーバーに送信します。
  • サーバーは、プレーヤーXの回転かどうかをチェックし、そうでない場合はエラーを返します。
  • サーバはサイコロを振ります。そのサーバは3と仮定します。
  • サーバはYに変わります。
  • サーバは、サイコロが3であり、Yの順番であるというメッセージをすべてのクライアントに送信します。

基本的にサーバーは、プレイヤーからのコマンドを待ち、順番に実行します。世界を更新し、新しい世界をすべてのクライアントにブロードキャストします。クライアントはサーバーからの更新を取得してユーザーに表示するだけです。

方法2:ゲームロジックのロックステップシミュレーション

ほとんどは、単にコマンドを伝えるために、それらの間を仲介クライアントとサーバで行われます。コマンドのみが転送され、各クライアントで状態がシミュレートされます。同期のバグが起きないように注意する必要があります(コマンドが遅れたり、他のことが起こる可能性があります)。同じ状態の各クライアントでコマンドを適用することを確認する必要があります。例えばランダムなシードは同じでなければならないので、ランダム関数は両方のクライアントで同じ値を返します。

例:

  • プレイヤーXは、ロール上でサイコロをクリックします。
  • クライアントXは自分自身のためにサイコロを振り、その結果を4とします。
  • クライアントXはロールコマンドをサーバーに送信します。
  • クライアントYへのサーバーブロードキャストロールコマンド。
  • クライアントY受信ロールコマンド。
  • Yはサイコロを転がしますと4を生じるはずであるクライアント(あなたのコードは一貫した方法で、すべてのクライアントで同じ結果を提供する必要があります)
+0

ありがとうございます。あなたは私ができることについて私の心をきれいにしました。今のところ、何かを参考にしてより理解し、それをゲームに適用することができますか? – SHEIKH

+0

@SHEIKHようこそ。 https://gafferongames.com/categories/networked-physics/のようなものがありますが、それはあなたが必要以上に多いと思います。多分あなたは簡単なチャットJavaアプリケーションを作成することから始めることができます。 –

関連する問題