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

C 語言實作五子棋 AI:基於 5×5 區域評估的啟發式演算法

     編輯:關於C語言

在 Turbo C 2.0 圖形環境下實作人機對戰五子棋。AI 採用「滑動窗口 + 方向評分」策略:以 5×5 窗口掃描全盤(15×15),對 12 條線(5 橫、5 直、2 斜)計算棋型分數,結合空位權重選擇最佳落子點。程式碼結構清晰,適合研究棋類遊戲基礎 AI。

核心資料結構


#define N 15
int board[N+1][N+1]; // 0=空, 1=玩家(黑), -1=AI(白)

struct EvalCell { long score; int x, y; };
EvalCell eval[N+1][N+1], best, best5x5;

AI 決策流程 zhineng()

  1. 初始化 eval 陣列分數歸零。
  2. 雙層迴圈掃描所有 5×5 窗口左上角 (i,j)(i=1..N-4, j=1..N-4)。
  3. 呼叫 zh5(i,j) 評估該窗口內 25 格的最佳落子位置與分數,累加到 eval。
  4. 全盤遍歷 eval,挑選分數最高且為空位的座標;同分時選距上手落子較近者(攻防兼顧)。
  5. 落子更新 board,繪圖顯示。

5×5 窗口評分邏輯 zh5()

  1. 將 5×5 區域複製到區域陣列 b[6][6](1-based)。
  2. 計算 12 條線的棋子連線和 c[1..12](黑子 +1,白子 -1,空 0)。
  3. 依棋型賦分:
連線和棋型基礎分備註
±5五連立即獲勝/失敗回傳 STOP 終止遊戲
±4活四/衝四100,000極高優先級
±3活三/眠三150需進一步判斷活/眠
±2活二120/100
±1單子1
  1. 對分值為 ±3(活三)的線,呼叫 zzh5() 精確判斷空位位置加分。
  2. 將 12 條線分數分配到 25 個格子 d[6][6](交叉點疊加)。
  3. 已有棋子的格子設為 -2(不可落子)。
  4. 選出區域內最高分格子,更新全域 eval 累加。

關鍵函式 zzh5(b, lineIdx)

針對活三線,檢查兩端是否為空,根據空位數量與位置給予額外加分,區分「活三」(兩端空)與「眠三」(一端堵)。

繪圖與互動

  • 使用 graphics.h 繪製 15×15 棋盤格線。
  • 滑鼠點擊或鍵盤方向鍵移動游標,Enter 落子。
  • 落子後檢查四方向連線 ≥5 判定勝負。

優化方向

  • 引入 Alpha-Beta 剪枝 + 遞歸搜尋(NegaMax),替代單層啟發式。
  • 建立開局庫、棋型查表(Zobrist Hash + Transposition Table)。
  • 支援更大棋盤、雙人模式、悔棋、存檔/讀檔。

完整原始碼包含 main()、zhineng()、zh5()、zzh5()、繪圖與輸入處理,編譯於 TC2.0(大記憶體模型)。本專案展示了啟發式評估函數在棋類 AI 中的經典應用模式。

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