//这里仅取了必要部分 // 随机模拟游戏 int simulateRandomGame(int player) { int currentPlayer = player; while (1) { // 随机选择一个空位 int x, y; do { x = rand() % BOARD_SIZE; y = rand() % BOARD_SIZE; } while (board[x][y] != EMPTY);
// 下子 board[x][y] = currentPlayer;
// 检查是否获胜 if (checkWin(currentPlayer)) { return currentPlayer; }
// 蒙特卡洛算法选择最佳走法 void monteCarloMove() { int bestMoveX = -1, bestMoveY = -1; int bestWinRate = -1;
// 遍历所有空位 for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { if (board[i][j] == EMPTY) { //凡是有空位的落点,均进行 模拟 int wins = 0; //记录这一个落点win的次数
// 模拟 SIMULATIONS 次 for (int k = 0; k < SIMULATIONS; k++) { // 保存当前棋盘状态 int tempBoard[BOARD_SIZE][BOARD_SIZE]; for (int x = 0; x < BOARD_SIZE; x++) { for (int y = 0; y < BOARD_SIZE; y++) { tempBoard[x][y] = board[x][y]; } } // 储存board
// 下子并模拟游戏 board[i][j] = AI; int result = simulateRandomGame(AI); //模拟 if (result == AI) wins++;
// 恢复棋盘状态 for (int x = 0; x < BOARD_SIZE; x++) { for (int y = 0; y < BOARD_SIZE; y++) { board[x][y] = tempBoard[x][y]; } } }