2013-03-17 66 views
2

我做了一个黑杰克版本使用GUI对象添加到从ActionListener的主框架。我的问题是,大部分的实现都在创建窗口的同一个类中。类GameWindow都启动JFrame,添加可视对象,如卡图标,文本存储到JLabel,然后将它们添加到不同的JPanel。黑杰克与GUI,另一类

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

我想为每个按钮创建一个类,如“Class Deal implements ActionListener”,然后让该类处理ActionPerformed(ActionEvent e)。问题是如何从这个其他类中添加对象到GameWindow? 我该如何将甲板,玩家(分数和卡牌,存储在ArrayList中)和银行(分数和卡牌)对象发送给相应类中的ActionPerformed(交易,保持和命中)?

我不想发布代码导​​致它很多,因为我尝试了不同的解决方案,现在是一个混乱,但如果你想要我发布代码的任何部分或所有它只是告诉我。

编辑,以为是小的文本;)

我用,现在,是 CardDeck的类,有一个ArrayList和方法类似的drawcard(),随机播放()等 卡,有一个ImageIcon和一个保持其价值的int。 GameWindow扩展JFrame实现ActionListener,初始化JFrame,并处理与JButtons Deal,Hit和Stay相关的ActionPerformed(这是我想改变的)。 玩家,持有在ArrayList中绘制的玩家卡牌,并将得分作为int 银行,与玩家相同但是对于ai。 Main,执行GameWindow。

回答

0

分而治之。你需要一个GameEngine类,它保存数据并提供操作它的方法。你需要一个单独的GameWindow来处理显示游戏,但依靠GameEngine来保存数据并实际运行游戏。 ActionListners需要引用GameEngine,就是这样;一切可以通过调用方法来完成。

GameEngine本身可能与其他类一起工作:甲板,卡片等。尽量让每个类代表一个明确定义的概念。保持代码靠近它使用的数据。

+0

感谢您的回答,我会为此努力。 – user2179550 2013-03-17 15:51:53