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

C# 實作中國象棋遊戲:虛擬棋盤座標、棋子介面與移動規則

     編輯:關於C#

本文分享一個教學用途的中國象棋遊戲原型,展示如何用 WinForms 實作 9×10 虛擬棋盤座標系、棋子統一介面 IChessItem、滑鼠事件處理選取/移動/吃子、以及各棋子特殊移動規則(馬腳、象眼、炮架、兵過河)的程式結構。

核心架構

  1. 虛擬座標系:GridX (0-8)、GridY (0-9) 對應 9×10 交叉點,所有邏輯運算在虛擬座標,繪圖時換算為像素座標。
  2. 棋子介面 IChessItem:
    
    public interface IChessItem
    {
        ChessType Type { get; set; }        // 紅/藍方
        bool IsChecked { get; set; }        // 是否被選取
        int StepX { get; } int StepY { get; } // 基礎步長(供簡單棋子用)
        int GridX { get; set; } int GridY { get; set; }
        bool MoveItem(int targetX, int targetY); // 嘗試移動,含規則驗證
        void InitItem();                    // 初始化位置
        void Remove();                      // 被吃移除
    }
    
  3. 基類 ChessItemBase:實作共用屬性、MoveItem 呼叫虛擬 LimitPoint 驗證合法性。
  4. 具體棋子類別:Che(車)、Ma(馬)、Xiang(象)、Shi(士)、Jiang(將/帥)、Pao(炮)、Bing(兵/卒),覆寫 LimitPoint 實作特殊規則。

關鍵事件處理

  • cib_Click(棋子點擊):處理選取切換、吃子判斷(目標位置有敵方棋子 → 移除敵方、移動己方)。
  • Form1_MouseDown(空白處點擊):若有棋子被選取,計算虛擬座標並呼叫 MoveItem 嘗試移動。

特殊規則實作要點

繪圖與座標換算


// 虛擬 → 實際像素
int pixelX = BoardOriginX + GridX * CellWidth;
int pixelY = BoardOriginY + GridY * CellHeight;

// 實際 → 虛擬(滑鼠點擊)
int gridX = (mouseX - BoardOriginX) / CellWidth;
int gridY = (mouseY - BoardOriginY) / CellHeight;

專案下載與擴充方向

  • 原始碼:Chess.rar
  • 擴充建議:
    • 加入 AI:Minimax + Alpha-Beta 剪枝、評估函數(子力、位置權重)。
    • 網路對戰:SignalR / TCP Socket 同步雙方棋盤狀態。
    • 悔棋/存檔:命令模式記錄每步移動,支援序列化。
    • 規則引擎:將 LimitPoint 抽離為獨立驗證器,支援變體規則。

此專案雖簡單,但完整示範了「棋盤遊戲」的核心 MVC 架構:Model(棋子/規則)、View(繪圖/座標)、Controller(滑鼠事件/流程控制),是學習遊戲程式設計的優秀切入點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
棋子規則實作關鍵
馬日字腿,受「蹩馬腿」阻擋檢查「腿」座標 (x±1,y) 或 (x,y±1) 是否有棋子
象田字腳,不得過河,受「塞象眼」阻擋檢查中心點 (x±1,y±1) 是否有棋子;Y 限制自方半邊
炮直線移動,吃子需隔一個「炮架」移動路徑上棋子數 = 0;吃子路徑上棋子數 = 1
兵過河前只能直進,過河後可左右平移依 Y 判斷是否過河,限制移動向量