これは学校のプロジェクトです。コードを提供しないでください。正しい方向に導くためのヒントを探しているだけです。
クライアントがサブスクライブするゲーム サーバーを作成してテストします。サブスクライブすると、クライアントは現在プレイ中のゲーム (同じゲームで、その「インスタンス」が異なるだけ) のリストを受け取ります。その後、クライアントはゲームに参加するか、新しいゲームを開始するかを選択できます。実際にゲームを開始するには、少なくとも 2 人のプレイヤーが必要です。システムは、すべてが 1 つのゲームをプレイする複数のクライアント、または複数のゲームをプレイする複数のクライアントをサポートする必要があります。
このプロジェクトの目的は、Java、TCP、およびスレッド化の経験を積むことです。
私の現在の設計と実装には、server.java と client.java の 2 つのファイルがあります。
- サーバーファイルには、サーバー、ロビー、ゲームの 3 つのクラスがあります。
- クライアント ファイルには、クライアント クラスが 1 つあります。
「ゲーム」の実装は些細なことですが、それで問題ありません。
現在、サーバー クラスはクライアント クラスとの TCP 接続を確立します。クライアントがインスタンス化されるたびに、サーバー クラスでソケットが受け入れられ、プログラムが続行されます。
続いて、サーバー クラスはロビー クラスを作成します。
ロビー クラスは、私が問題を抱えている場所です。デフォルトでは、1 つの「ゲーム」オブジェクトを作成し、clientSocket に渡します。
game g = new game(clientSocket, playerID);
g.start();
ゲームクラスはスレッドを拡張します。これが正しい方法だと思います。各「ゲーム」はいわば個別のスレッドになるため、プレイヤー A と B は 1 つのスレッドを共有し、プレイヤー C と D は別のスレッドで新しいゲームを開始できます。
私はスレッドを初めて使用しますが、これは私が考えることができる最良の実装です。ロビー用に複数のスレッドを使用することはあまり意味がなく、クライアント用に複数のスレッドを使用するのも無意味なので、ゲーム クラスのマルチスレッド化は理想的だと思います。
現在、クライアントの 2 つのインスタンスを作成すると、両方とも同じ「スレッド」に参加しています (両方とも同じゲーム内にあり、互いに通信できます)。
新しいプレイヤーがロビーに「new」などと入力して、新しいスレッドである新しい「ゲーム」を作成できるようにするにはどうすればよいですか。
スレッド化などに関する特定の部分を誤解していると確信していますが、助けていただければ幸いです。