1

Java (クライアントとサーバーの両方) でマルチプレイヤー ターン ベースの戦略ゲームを開発しています。私はネットワーク ゲームの経験はあまりありませんが、マルチクライアント チャットやソケットを使用した 2 プレーヤーの三目並べなどの小さなことはしました。これをコーディングしてくれる人を探しているわけではありませんが、ガイダンスを教えてください。

ゲームは複数の段階を経ます。最初にユーザーが接続してログインします。彼がゲームをホスト/参加するオプションを与えられた後. 彼がゲームに参加するか、誰かが彼のゲームに参加した後、クライアントはゲーム ステージに移動します。ゲームは 1 対 1 で、5 秒ごとにデータを送受信するだけで済みます (それが重要な場合は?)。これらの「段階」を通過するようにクライアント/サーバーを設計する方法について、いくつかのガイダンスが必要です。

これは私が現在それを実装することを考えている方法です:

  1. 接続が確立されると、接続には、サーバーの状態を記述する対応する変数が含まれます。例: 0 はログイン前、1 はログイン後、2 はホスティングなど...

  2. クライアントがサーバーにデータを送信するたびに、状態を確認し、それに応じて処理します。ログイン前と同様に、データが送信された場合、サーバーはそれがログインの詳細であると想定し、それらが有効な場合は変数を 1 に変更し、クライアントに先に進むように指示します。

これを行うより良い方法はありますか?

4

3 に答える 3

2

フルJava +クライアントサーバー+ゲームなので:

ストレートソケットの使用を忘れることをお勧めします。

私の意見では、 Java RMIが最善の策です。

どうして?:

  • 一度習得すれば、ソケットよりも簡単です。

  • Java クライアント/サーバーからリモート メソッドを直接呼び出すことができます。

  • コールバックを使用できます。(つまり、クライアントがまだ接続されていることをサーバーがテストしています)

おそらくもっと多くの理由があります...

于 2013-01-10T01:43:13.943 に答える
1

基本的に、あなたがそれを説明した方法は、それが一般的に行われている方法です。サーバーにクライアント接続をリッスンさせ、クライアント接続が発生したときに独自のスレッドで処理するだけです。次に、メッセージを送受信して状態 (ログインとログアウト、ゲームへの参加など) を確認し、ゲーム中のプレイヤーの移動に関するメッセージを送信します。TCP または UDP ソケットは短期的には機能しますが、サーバーとクライアントの間で送信されるメッセージはかなり小さく、ゲームの種類によっては遅延が重要になる可能性があるため、最終的には主に UDP ベースのシステムに切り替えることになるでしょう。

JSON 経由でメッセージを送受信することを検討してください (http://wiki.fasterxml.com/JacksonHome は、私が最後に確認したかなり人気のある Java パーサーです)。

さらに、クライアントとその状態を効率的に管理するには、サーバー側にいくつかのデータ構造が必要になります。たとえば、各クライアントの整数 ID と、Map<Integer, Client>現在接続しているすべてのログイン ユーザーを格納するために使用する を持つことができます。ここで、Clientはそのユーザーの現在の状態を格納するオブジェクトです。

これにより、どこから始めるべきかについてのアイデアが得られることを願っています。

于 2013-01-10T04:59:09.793 に答える
0

Mina または Netty を Nio ソケット フレームワークとして使用できます。サーバーとクライアントの両方で Java を使用すると、メッセージ プロトコルの設計が容易になります。1 つのクライアントが移動すると、サーバーに移動メッセージが送信され、サーバーはメッセージを両方のクライアントにプッシュ バックします。メッセージを受信すると、両方のクライアントが一緒に移動します。したがって、ネットワークの遅延を回避する場合、2 つのクライアントは同期して移動します。Java で書かれたオープンソースのゲーム フレームワークを見ることができます。

Java ゲーム サーバー エンジン

于 2017-10-10T02:43:22.513 に答える