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

C# 象棋遊戲完整實現:虛擬網格座標、棋子介面設計與移動邏輯架構

     編輯:關於C語言

前言

本專案為教學用途開發的中國象棋遊戲,展示 C# 在棋盤遊戲開發中的核心架構:虛擬網格座標系、棋子介面抽象、基底類別封裝共同邏輯、特殊走法重寫。原始碼簡潔,適合初學者研讀遊戲程式設計模式。

核心架構設計

1. 虛擬網格座標系 (9×10)

  • 棋盤邏輯與繪圖完全分離
  • 所有棋子位置以 GridX (0-8)、GridY (0-9) 整數表示
  • 繪圖時統一轉換:PixelX = GridX * CellWidth + OffsetX
  • 滑鼠點擊座標反向換算:GridX = (MouseX - OffsetX) / CellWidth

2. 棋子介面 IChessItem

public interface IChessItem
{
    ChessType Type { get; set; }        // 紅/藍方
    bool IsChecked { get; set; }        // 是否被選中
    int StepX { get; }                  // 水平移動步長
    int StepY { get; }                  // 垂直移動步長
    int GridX { get; set; }             // 網格 X
    int GridY { get; set; }             // 網格 Y
    bool MoveItem(int chessX, int chessY); // 嘗試移動
    void InitItem();                    // 初始化
    void Remove();                      // 被吃移除
}

3. 基底類別 ChessItemBase

  • 實作 IChessItem 共同屬性與基礎移動邏輯
  • 定義 virtual bool LimitPoint(int x, int y) 供子類別重寫特殊規則
  • 封裝「是否在棋盤內」、「目標格是否同色棋子」等通用檢查

4. 具體棋子類別繼承體系

ChessItemBase
├── General (帥/將)      - 九宮格限制
├── Advisor (仕/士)      - 九宮格斜線
├── Elephant (相/象)     - 田字腳、阻擋眼
├── Horse (傌/馬)        - 日字腳、阻擋腿
├── Chariot (俥/車)      - 直線任意格
├── Cannon (炮/砲)       - 直線、需隔一子吃子
├── Soldier (兵/卒)      - 過河前只能直進、過河後可左右

關鍵事件處理

1. 棋子點擊 (cib_Click)

  • 處理棋子選中/取消選中
  • 處理吃子邏輯:若已有棋子被選中,嘗試移動至目標棋子位置

2. 滑鼠按下移動 (Form1_MouseDown)

  • 將滑鼠座標轉換為網格座標
  • 呼叫 selectedItem.MoveItem(targetX, targetY)
  • 移動成功則更新棋子 GridX/GridY、重繪

特殊走法演算法重點

棋子核心邏輯LimitPoint 重寫要點
馬日字:先直一格再斜一格檢查「拐腳」位置是否有子阻擋
象田字:對角兩格檢查「象眼」中心點是否有子阻擋
炮移動直線無阻、吃子需隔一子統計路徑上棋子數:0=可移動、1=可吃子、>1=不可
兵未過河只能前進、過河可左右根據 GridY 判斷河界,限制 StepX/StepY

專案結構與資源

  • 介面層:IChessItem 定義契約
  • 邏輯層:ChessItemBase + 7 具體棋子類別
  • 主控層:Form1 處理事件、管理棋子集合、觸發重繪
  • 繪圖:Paint 事件中遍歷棋子繪製圖片/文字

原始碼下載:Chess.rar
部落格說明:C#實現的象棋遊戲程序

教學價值總結

  1. 關注點分離:座標系、介面、基底類別、具體實現、UI 事件層層解耦
  2. 介面導向設計:IChessItem 讓主控層不依賴具體棋子類別
  3. 模板方法模式:MoveItem 定義骨架,LimitPoint 讓子類別填充規則
  4. 座標轉換統一:邏輯層只知網格,繪圖/輸入層負責像素轉換

此專案雖簡單,卻完整展示了棋盤遊戲開發的核心架構模式,是學習 C# 遊戲程式設計的優質範例。

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