2013-03-17 67 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