-1

Java で単純なチェス ゲームを設計しており、それにネットワーク (クライアントおよびサーバー モデル) を追加したいと考えて
います。1 人のプレイヤーがサーバー側に、もう 1 人がクライアント側にいます。現在、server.java client.java と game.java があります。

game.java は、サーバー側とクライアント側の両方に含まれています (各プレイヤーにはゲーム インスタンスがあります)。私の問題は、2 つの側の間でいつデータを送信するかわからないことです。ゲーム クラスにリスナーを追加しましたが、サーバー クライアントはゲーム クラス内でクリック イベントを取得できないようです。1 つの方法は、ビジー待機を使用して、更新があるかどうかを継続的に確認することです。しかし、忙しい待機を使用せずに更新を確認する方法はありますか?

4

3 に答える 3

1

このゲームを設計する標準的な方法は、ゲームを調整する中央サーバーと通信するクライアント クラスの 2 つのインスタンス (各プレイヤーに 1 つ) を持つことです。各クライアントはメモリ内にボードの独自の表現を持っていますが、サーバーは、あるクライアントから別のクライアントに移動が中継されること、選択された移動が有効であること、スコアを保持すること、ゲームがいつ終了するかを判断することを確認する必要があります。など。基本的に、サーバーはコントローラー/コーディネーター/審判です。

于 2013-02-13T05:20:14.563 に答える
0

基本的に、どのプレイヤーが動くことができるかを指示するある種の「トークン」を設定する必要があります。トークンを持っているプレーヤーは、有効な動きをすることができる唯一のプレーヤーであり、トークンと一緒にそのデータを他のプレーヤーに送り返します。その後、最初のプレーヤーは「待機」状態になります...

トークンを持たないプレイヤーは、他のプレイヤーからの応答を待っています。これは、ソケットの入力ストリームから読み取るだけで簡単に確立できます。

アクティブなプレーヤーが移動すると、その移動(したがってトークン)が待機中のプレーヤーに送信されます。次に、アクティブなプレーヤーは待機状態に入り、そこにあるソケットの入力ストリームを読み取ります。アクティブになったばかりのプレーヤーは、更新が通知され、移動を許可されます。そしてその周りに行きます...

「移動受信」、「ネットワーク障害」などのネットワークイベントを「ゲームエンジン」に通知する「ネットワークエンジン」からのコールバックメカニズムがあります。

「ネットワークエンジン」には、移動のデータを他のプレーヤーに送り返すことができる簡単な方法があります。正しくコーディングされている場合、「ネットワークエンジン」は、プレーヤーが移動するようになるまで、「ゲームエンジン」からの要求をブロックできます。同様に、プレイヤーの現在の状態を判断するためのチェックも行うことができます。

いくつかのランダムな考え:P

于 2013-02-13T05:22:26.987 に答える
0

この投稿には、サーバーとクライアントを作成し、複数のリクエストを受け入れる方法に関するサンプル コードがあります。

于 2013-02-13T05:15:01.357 に答える