首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 掃雷遊戲從零實現:動態控件、GDI+ 繪圖與 FloodFill 算法全解析

     編輯:關於C#

核心實現步驟

  1. 動態生成控件:Controls.Add(new MineControl()) 建立格子陣列
  2. 隨機佈雷:Random 選取索引置雷
  3. 狀態機設計:每格 Initial / Pressed / Flag / QuestionMark / Unseal
  4. 操作封裝:Press()/UnPress()/PutFlag()/Unseal() 內含狀態轉換與重繪
  5. GDI+ 繪圖:覆寫 OnPaint 直接畫 Icon,避免 PictureBox 載入延遲與閃爍
  6. FloodFill 遞迴:點擊空白格自動展開相鄰安全區
  7. 雙鍵同步:全域旗標追蹤滑鼠左右鍵組合(C# 無原生雙鍵事件)

關鍵代碼片段

// MineControl 狀態與繪圖
public enum State { Initial, Pressed, Flag, QuestionMark, Unseal }
protected override void OnPaint(PaintEventArgs e) {
    var img = GetImageForState(_state);
    e.Graphics.DrawImage(img, 0, 0, Width, Height);
}

// Form1 滑鼠處理
private void MineControl_MouseDown(object sender, MouseEventArgs e) {
    var mc = (MineControl)sender;
    if (e.Button == MouseButtons.Left) { ... }
    else if (e.Button == MouseButtons.Right) { ... }
    // 雙鍵需全域 bool leftDown, rightDown 協調
}

資源獲取

圖片資源來源:百度知道搜尋或從系統 winmine.exe 提取。

參考與致謝

  • icebird 開源版:CSharpMine
  • 本實現結構更清晰(View/Logic 分離),僅實現核心玩法

成果展示

掃雷運行截圖

源碼下載

完整專案已打包,歡迎下載學習、優化重構(如引入 MVVM、單元測試、AI 自動解雷等)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved