2

1.次の構造が間違っているかどうか、その理由とその解決策を知りたい: ネット ゲーム用のクライアントを実装したと仮定する クライアントには 2 つのメイン パッケージがあります:
A.GUI - すべてのswing JPanelsなど
B.LogicEngine

ロジック エンジンには clientThread というクラスがあります。このクラスの主な目的は、サーバーと通信して、Gui パネルで実行するコマンドを取得し、Gui パネルでのユーザー選択の結果として情報を送り返すことです。

2.そうするために、メインのGuiパネルの参照をclientThreadに保持する傾向があり、その逆も同様ですが、異なるプロジェクトの2つのクラス間で循環参照を行うのは間違っていますか?

3.オブジェクト指向プログラミングの問題で、論理エンジンパッケージ上にあるにもかかわらず、ゲームの流れを何らかの形で管理するクライアントスレッドのようなクラス内からGuiに表示されるものを実行するのは間違っていますか?

4.また、Gui 部分が論理部分を認識して使用している場合、それは問題になりますか?

アドバイスを聞きたい
です よろしくお願いします

4

2 に答える 2

8

明らかに、GUI はエンジンに依存するべきであり、その逆ではありません (そして、禁じられていますが、互いに依存すべきではありません)。

あなたの問題は実際にはかなり一般的で、解決するのは簡単です。エンジン スレッドでは、何かが発生するたびに通知されるリスナーをクライアント コードでインストールできるようにする必要があります。GUI よりもそのリスナーを実装してインストールします。ゲーム ロジック エンジンは、GUI パッケージにある特定の実装ではなく、リスナー インターフェースのみを認識することに注意してください。

これはObserverパターンの実装であり、いくつかの利点があります。

  • 通知コード (ロジック) は「関心のある」コード (GUI) と結合されていないため、エンジンから GUI への依存関係はありません。
  • たとえば、エンジンを変更せずに Swing アプリケーションをコンソール/モバイル/Web アプリケーションに変更するなど、リスナー/オブザーバーの任意の実装をプラグインできます。
  • GUI を更新するリスナー、サウンドを実行するリスナーなど、複数のリスナーを持つことができます。

最後に、ロジック スレッドから GUI を操作することに問題はありませんが、イベント ディスパッチ スレッドに注意する必要があります。

于 2011-09-27T21:56:13.980 に答える
5
  1. 3 番目の要素を追加します。GUI、LogicEngine、および通信パッケージが必要です。このようにして、ファイル、ローカル データベース、またはモック クラスを使用してテストを行うことができます。ロジックとソケットは一緒に属していません。それらは単に互いの入力と出力です。
  2. 個人的には、GUI について何も知らないロジックを作成します。GUI の仕事は、ロジックを呼び出すためだけに存在します。GUI は、誰が何を呼び出しているかを認識していません。私が使っているか妻が使っているかを電子レンジが気にしないのと同じ理由です。
  3. この質問がよくわかりません。言い換えていただけますか?
  4. いいえ、その逆が問題です。GUI が存在するため、ユーザーはロジックを操作できます。ロジックが GUI に依存している場合、悪いことが起こります。
于 2011-09-27T21:56:36.977 に答える