0

(Collegeboard の AP 試験のケーススタディのような GridWorld)

それで、私はここ数年、空き時間にこのゲームに取り組んできましたが、かなり順調に進んでいます。グリッド内を走り回り、アイテムを拾い、モンスターなどと戦う素敵な小さな棒のキャラクターがいます。今、私はそれを次のレベルに進める準備ができていると思います (ネットワーク クラスのプロジェクトを作成する必要があるため、とにかく多くの選択肢があります...)、そして私は'進行方法に少し困惑しています。

私は過去に ServerSocket を使用していくつかのプログラムを作成しました。そこでは 1 つのサーバーが実行されており、複数のクライアントがそれに接続してメッセージを受信できますが、それらはすべて単純なテキスト プログラムであり、少数の文字列しか交換しません。これにソケットを使おうと思っていたのですが、設定方法がわかりません...

GridWorld が実行されると、グリッドとその中のすべてのアクターを含む JFrame のようなものが自動的にポップアップします。「エンジン」のすべてのコードを含むメイン ソース ファイルには、基本的に 2 つの巨大なメソッドがあります。単位時間ごとに何が起こるかを制御する step() と、keyPressed() です。ユーザーがキーを押したときの動作を制御します。ここで、step() は確実にサーバー側にある必要があり、keyPressed() はウィンドウと一緒にクライアント側にある必要があると考えていました。すべての NPC のアクションとゲームの計算を管理するメイン ゲームを、サーバー上で 1 回だけ実行するという考えです。

しかし、どのように正確に分割しますか?サーバーとクライアントの間でデータをやり取りする方法さえわかりません。 PrintWriter と BufferedReader を使用しました。PrintWriter には任意のオブジェクトを受け入れる print() メソッドがあることがわかりましたが、BufferedReader はどのようにそれを受け取るのでしょうか? オブジェクトを読み取るメソッドはありません。

つまり、基本的には、サーバーが何をすべきか、クライアントが何をすべきか、どのライブラリを使用すべきか、特定の機能をどこに置くべきかなど、すべての詳細を知りたいのです。

4

2 に答える 2

1

現在の設計に基づくと、クライアントとサーバー間の通信にRMIのようなものを使用したいと思うかもしれません。これにより、ネットワーク通信の管理についてあまり心配することなく、クライアントとサーバー間でメソッドを呼び出す方法に集中できます。

RMIは、長期的に使用したいものではないかもしれませんが、クライアントを稼働させるための正しい次のステップである可能性があります。


ストリームに関しては、PrintWriter.print(Object)は、オブジェクトの文字列表現(つまり、toString()を呼び出す)を書き出すだけなので、オブジェクトに戻す方法はありません。

そのためには、ObjectOutputStreamとJavaのセラリゼーションが必要です。しかし、RMIは、詳細に深く入り込む必要なしに、これを行います。

于 2011-10-24T00:54:39.197 に答える
0

よし、私はソケットを使用し、ObjectOutputStreams などを使用して自分でシリアライゼーションを行うことにしました。私はすべてをどこに置くべきかを考え出し、基本的には問題なく動作していますが、ゲーム自体には避けられない不具合があり、解決する必要があります. ありがとう、ティム:)

于 2011-11-12T15:05:25.647 に答える