2011-10-23 5 views
0

(CollegeWidのAP試験のケーススタディのようなGridWorld)GridWorldで作ったゲームにネットワーキングを追加するにはどうしたらいいですか?

私はここ数年間、自由な時間にこのゲームに取り組んできました。私はグリルの周りを走り、アイテムをピックアップし、モンスターやものを戦う素晴らしいリールのスティックキャラクターを持っています。今、私は次のレベルに持っていく準備ができていると思います。(とにかく私のネットワーククラスのプロジェクトを作る必要があるので、進歩する方法に少し困った。

過去にServerSocketを使用していくつかのプログラムを作成しました.1つのサーバーが稼動していて、複数のクライアントが接続してメッセージを受け取ることができますが、すべてが単純なテキストプログラムであり、少数の弦。ソケットは私がこれを使って考えていたものですが、設定方法がわかりません...

GridWorldが実行されると、グリッドを含むJFrameのように自動的にポップアップ表示されますそれにすべての俳優。基本的に2つの巨大なメソッドがあります:step()は時間単位ごとに何が起こるかを制御し、keyPressed()はユーザーがキーを押したときの動作を制御します。今、私はstep()がサーバー側にある必要があり、keyPressed()はウィンドウと共にクライアント側になければならないと考えていました(そうでなければ、ユーザーは、再演?)というのは、すべてのNPCのアクションとゲームの計算を1回だけ、サーバー上で実行し、複数のクライアントがそれに接続し、それぞれが独自のキャラクターを持つようにするメインゲームを持つことですゲーム(基本的にmmorpgのような)。

しかし、どのように正確に分割するのですか? (もしそれが正しい方法であれば)サーバーとクライアントの間でデータをやりとりする方法についてもわからない - 私が言及した単純なテキストプログラムの場合、私はいつもPrintWriterとBufferedReaderを使用しました。私はPrintWriterがObjectを受け付けるprint()メソッドを持っているが、BufferedReaderはそれをどのように受け取りますか? Objectを読み取るメソッドはありません。

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

+2

私はmmoのアーキテクチャーは、SOの答えの上に少しですと思う。 – nos

答えて

0

私はソケットを使用して整理し、ObjectOutputStreamsなどで自分自身でシリアライズすることに決めました。私はどこにすべてを置くべきかを考え出しました。基本的にうまくいっていますが、私はまだ試合に不可欠な不具合が残っています。ありがとう、ティム:)

1

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

RMIは長期的な使い方ではないかもしれませんが、おそらくクライアントを起動して実行するための正しい次のステップです。ストリームとして


- PrintWriter.print(オブジェクト)は、単に文字列表現を書き出す - オブジェクトのので、バックオブジェクトにそれを有効にする方法はありません - 、すなわちそれはのtoString()を呼び出します。

そのためには、ObjectOutputStreamとJavaのseralizationが必要です。しかし、RMIは、あなたが詳細に行き過ぎる必要なく、これを行うでしょう。

関連する問題