2

guiでブラック・ジャック版を作りました。私の問題は、実装の多くがウィンドウを作成する同じクラスにあることです。クラス GameWindow は、JFrame の初期化、カード アイコンなどのビジュアル オブジェクトの追加、およびテキストの JLabels への保存とそれらの JPanel への追加の両方を行います。

それは問題ありませんが、GameWindow (ActionListener を実装する) はボタン (作成されたクラスではない単純な JButtons) に ActionListener を追加し、ActionPerformed を実装します。

「Class DealはActionListenerを実装する」のように、ボタンごとに1つのクラスを作成し、クラスにActionPerformed(ActionEvent e)を処理させたいと思います。問題は、この他のクラスからオブジェクトを GameWindow に追加するにはどうすればよいかということです。Deck、Player(スコアとカード、ArrayList に保存)、Bank(スコアとカード)、オブジェクトをそれぞれのクラス (Deal、Stay、Hit) で ActionPerformed に送信するにはどうすればよいですか?

私はコードを投稿したくありませんでした。さまざまな解決策を試したので、今は少し混乱していますが、コードの一部またはすべてを投稿したい場合は、私に教えてください.

編集、それは小さなテキストだと思った;)

私が現在使用しているクラスは CardDeck で、ArrayList と drawCard()、shuffle() などのメソッドがあります。Card には ImageIcon とその値を保持する int があります。GameWindow は JFrame を拡張し、ActionListener を実装し、JFrame を初期化し、JButtons Deal、Hit、Stay に関連付けられた ActionPerformed も処理します (これは私が変更したいものです)。Player は、ArrayList に描画されたプレイヤー カードを保持し、スコアを int バンクとして保持します。これは、player と同じですが、ai 用です。Main、GameWindow を実行します。

4

1 に答える 1

0

分割統治。データを保持し、それを操作するメソッドを提供する GameEngine クラスが必要です。ゲームの表示を処理する別の GameWindow が必要ですが、データを保持して実際にゲームを実行するには GameEngine に依存します。ActionListners には、GameEngine への参照が必要です。それだけです。その上でメソッドを呼び出すことで、他のすべてのことができます。

GameEngine 自体は内部で他のクラス (Deck、Card など) と連携する場合があります。各クラスが明確に定義された 1 つの概念を表すようにしてください。コードを使用するデータの近くに置いてください。

于 2013-03-17T15:36:11.970 に答える