架構理念澄清
感謝社區討論。我的初衷是將 MineControl 視為純視圖組件(類似 Button/Label),僅負責顯示狀態(數字、旗標、問號、未翻開),不包含遊戲邏輯。
職責劃分
| MineControl (View) | Form1 (Controller/Logic) |
| 狀態:Initial/Pressed/Flag/QuestionMark/Unseal | 滑鼠事件判斷:左鍵、右鍵、雙鍵、空白區域遞迴展開 |
| 操作:Press()/UnPress()/PutFlag()/Unseal() | 呼叫介面觸發狀態轉換與重繪 |
優勢
- 邏輯層不關心繪圖細節,結構清晰
- 視圖可複用、易替換(如改 WPF)
- 單元測試友善:邏輯可獨立測試
關鍵技術點
- GDI+ 繪圖:覆寫
OnPaint 直接繪 Icon,避免 PictureBox 載入閃爍
- 雙鍵同步:C#
MouseDown 無法直接得知另一鍵狀態,需全域旗標追蹤左右鍵組合
- FloodFill 遞迴:點擊空白區域自動展開相鄰安全格
參考資源
徐小俠完整實現:C# 掃雷最佳實踐
icebird 早期版本:CSharpMine
結語
架構無絕對標準,多閱讀他人實現、持續重構,方能精進。歡迎繼續拋磚引玉!
- 上一篇文章: 趣味編程:C# 中 Specification 模式初探—— 從 OrWhere 需求說起
- 下一篇文章: C# 4.0 泛型協變與逆變深度解析:從陣列陷阱到安全型別參數
Copyright ©
程式碼之家 All Rights Reserved