这里简略了代码,仅仅展示了必要部分 int alphaBeta(int depth, int alpha, int beta, int isMaximizing) { int score = evaluate(); if (score == 10 || score == -10) return score; // 胜负已分 if (isBoardFull()) return 0; // 平局
if (isMaximizing) { int best = -INT_MAX; for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { if (board[i][j] == ' ') { board[i][j] = 'X'; // 假设当前玩家是X best = max(best, alphaBeta(depth + 1, alpha, beta, 0)); board[i][j] = ' '; // 撤销走法 alpha = max(alpha, best); if (alpha >= beta) break; // 剪枝 } } } return best; } else { int best = INT_MAX; for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { if (board[i][j] == ' ') { board[i][j] = 'O'; // 假设对手是O best = min(best, alphaBeta(depth + 1, alpha, beta, 1)); board[i][j] = ' '; // 撤销走法 beta = min(beta, best); if (alpha >= beta) break; // 剪枝 } } } return best; } } //main
while (1) { board[row][col] = 'O'; // 玩家是O
// AI回合 printf("AI的回合...\n"); int bestScore = -INT_MAX; int bestMove[2] = { -1, -1 }; for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { if (board[i][j] == ' ') { board[i][j] = 'X'; // AI是X int moveScore = alphaBeta(0, -INT_MAX, INT_MAX, 0); // 使用Alpha-Beta剪枝 board[i][j] = ' '; // 撤销走法 if (moveScore > bestScore) { bestScore = moveScore; bestMove[0] = i; bestMove[1] = j; } } } } board[bestMove[0]][bestMove[1]] = 'X'; // AI走法