2

我用 gui 制作了一个 Black Jack 版本。我的问题是,大部分实现都在创建窗口的同一个类中。类 GameWindow 都初始化 JFrame,添加卡片图标等视觉对象,并将文本存储到 JLabels 中,然后将它们添加到不同的 JPanel 中。

很好,但是 GameWindow(它实现了 ActionListener)还将 ActionListener 添加到按钮(它们是简单的 JButtons 未创建的类),并实现了 ActionPerformed。

我想为每个按钮创建一个类,例如“Class Deal实现ActionListener”,然后让该类处理ActionPerformed(ActionEvent e)。问题是如何从其他类向 GameWindow 添加对象?以及如何将 Deck、Player(Score 和 Cards,存储在 ArrayList 中)和 Bank(Score 和 Cards)对象发送到相应类(Deal、Stay 和 Hit)中的 ActionPerformed?

我不想发布代码,因为我尝试了不同的解决方案,所以现在有点乱,但如果你想让我发布代码的任何部分或全部,请告诉我。

编辑,认为这是很少的文字;)

我现在使用的类是 CardDeck,有一个 ArrayList 和 drawCard()、shuffle() 等方法。 Card,有一个 ImageIcon 和一个保存其值的 int。GameWindow 扩展了 JFrame 实现了 ActionListener,初始化了 JFrame,还处理了与 JButtons Deal、Hit 和 Stay 相关的 ActionPerformed(这是我要更改的)。Player,持有在 ArrayList 中绘制的玩家卡片,以及作为 int Bank 的分数,与 player 相同,但用于 ai。Main,执行 GameWindow。

4

1 回答 1

0

分而治之。您需要一个 GameEngine 类,它保存数据并提供操作数据的方法。您需要一个单独的 GameWindow 来处理显示游戏但依赖 GameEngine 来保存数据并实际运行游戏。ActionListner 需要对 GameEngine 的引用,仅此而已;他们可以通过调用方法来做的所有其他事情。

GameEngine 本身可能在内部与其他类一起工作:Deck、Card 等。尽量让每个类代表一个定义明确的概念。将代码放在它使用的数据附近。

于 2013-03-17T15:36:11.970 回答