本專案為教學用途開發的中國象棋遊戲,展示 C# 在棋盤遊戲開發中的核心架構:虛擬網格座標系、棋子介面抽象、基底類別封裝共同邏輯、特殊走法重寫。原始碼簡潔,適合初學者研讀遊戲程式設計模式。
GridX (0-8)、GridY (0-9) 整數表示PixelX = GridX * CellWidth + OffsetXGridX = (MouseX - OffsetX) / CellWidthpublic 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(); // 被吃移除
}
IChessItem 共同屬性與基礎移動邏輯virtual bool LimitPoint(int x, int y) 供子類別重寫特殊規則ChessItemBase ├── General (帥/將) - 九宮格限制 ├── Advisor (仕/士) - 九宮格斜線 ├── Elephant (相/象) - 田字腳、阻擋眼 ├── Horse (傌/馬) - 日字腳、阻擋腿 ├── Chariot (俥/車) - 直線任意格 ├── Cannon (炮/砲) - 直線、需隔一子吃子 ├── Soldier (兵/卒) - 過河前只能直進、過河後可左右
selectedItem.MoveItem(targetX, targetY)GridX/GridY、重繪| 棋子 | 核心邏輯 | LimitPoint 重寫要點 |
|---|---|---|
| 馬 | 日字:先直一格再斜一格 | 檢查「拐腳」位置是否有子阻擋 |
| 象 | 田字:對角兩格 | 檢查「象眼」中心點是否有子阻擋 |
| 炮 | 移動直線無阻、吃子需隔一子 | 統計路徑上棋子數:0=可移動、1=可吃子、>1=不可 |
| 兵 | 未過河只能前進、過河可左右 | 根據 GridY 判斷河界,限制 StepX/StepY |
IChessItem 定義契約ChessItemBase + 7 具體棋子類別Form1 處理事件、管理棋子集合、觸發重繪Paint 事件中遍歷棋子繪製圖片/文字原始碼下載:Chess.rar
部落格說明:C#實現的象棋遊戲程序
IChessItem 讓主控層不依賴具體棋子類別MoveItem 定義骨架,LimitPoint 讓子類別填充規則此專案雖簡單,卻完整展示了棋盤遊戲開發的核心架構模式,是學習 C# 遊戲程式設計的優質範例。