我在我簡單的基於Windows Forms的遊戲項目中組織簡單的概念問題。我必須使用Windows Forms實現Whack-A-Mole遊戲。 Molehills由checkoxes代表。如果複選框被選中,那麼在小丘中有一個痣。通過點擊選中的複選框可以殺死鼴鼠。簡單的Windows窗體遊戲中的類之間的依賴關係
我設法創建了GamePlay
類,其中包含i.a.類別:GameBoard
(基於TableLayoutPanel
和複選框數組的遊戲棋牌表示),Rules
(合格率,一輪中最大摩爾數,回合持續時間等)。在GamePlay
班也有PointsCounter
(到目前爲止有多少痣已經死亡)。我的解決方案中有更多的類/結構,但在這個問題的背景下它們並不重要。
遊戲板的尺寸可以在配置窗口中進行設置,所以我就 TableLayoutPanel中動態創建複選框,單擊開始遊戲按鈕後。數組複選框和事件處理程序放在GameBoard
類中。摩爾死亡後,我必須更新(實際上,我必須添加類的pointsForMoleKilling
)。但我不能在這樣的班級模式中。從事件處理程序複選框鼠標單擊(它在GameBoard
類中)沒有訪問PointsCounter
(它在GamePlay
類中)。
我應該如何重新組織類之間的依賴關係?
我的臨時解決方案是製作Rules
,pointsForMoleKilling
和score()
(也從GamePlay
類)靜態。
但是,如果我想保持'state'類遊戲板的狀態(也有由複選框表示molehills)我怎麼會訂閱事件處理程序(例如ckeckbox單擊事件處理程序)從控制器類?我不明白我們如何訂閱從控制器類的事件處理程序到來自「狀態」類的複選框單擊事件。在我看來,除非我們使用控制器類'static'來創建事件處理程序,否則就無法訪問。 – 2012-04-10 02:06:50
您的控制器類負責處理UI事件並更新模型。因此,一種方法是讓您的控制器註冊以單擊事件,然後更新您的狀態。重擊遊戲並沒有任何關於「複選框」的概念,只有痣和重擊,所以你的狀態不應該知道複選框或點擊。 '查看 - >點擊事件 - >控制器 - >調用重擊()方法 - >模型 – ungood 2012-04-11 18:34:34