在 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;
zhineng()eval 陣列分數歸零。(i,j)(i=1..N-4, j=1..N-4)。zh5(i,j) 評估該窗口內 25 格的最佳落子位置與分數,累加到 eval。eval,挑選分數最高且為空位的座標;同分時選距上手落子較近者(攻防兼顧)。board,繪圖顯示。zh5()b[6][6](1-based)。c[1..12](黑子 +1,白子 -1,空 0)。| 連線和 | 棋型 | 基礎分 | 備註 |
|---|---|---|---|
| ±5 | 五連 | 立即獲勝/失敗 | 回傳 STOP 終止遊戲 |
| ±4 | 活四/衝四 | 100,000 | 極高優先級 |
| ±3 | 活三/眠三 | 150 | 需進一步判斷活/眠 |
| ±2 | 活二 | 120/100 | |
| ±1 | 單子 | 1 |
zzh5() 精確判斷空位位置加分。d[6][6](交叉點疊加)。eval 累加。zzh5(b, lineIdx)針對活三線,檢查兩端是否為空,根據空位數量與位置給予額外加分,區分「活三」(兩端空)與「眠三」(一端堵)。
graphics.h 繪製 15×15 棋盤格線。完整原始碼包含 main()、zhineng()、zh5()、zzh5()、繪圖與輸入處理,編譯於 TC2.0(大記憶體模型)。本專案展示了啟發式評估函數在棋類 AI 中的經典應用模式。