Closed. This question needs
debugging details。它当前不接受答案。
想改善这个问题吗?更新问题,以便将其作为
on-topic用于堆栈溢出。
12个月前关闭。
Improve this question
我正在为一个类(class)项目创建4x4井字游戏。我决定不使用双方,也不使用随机移动,而是尝试实现Minimax算法以制造出具有竞争力的计算机。
我遵循了有关geeksforgeeks的指南,该指南显示了该算法的实现。我已将其跟随到T(而不是复制和粘贴)以尝试理解算法,但是只要轮到计算机,它就会运行
findBestMove()
函数并卡在内部。
我认为问题出在
findBestMove
函数或其中调用的
minimax
函数中。
findBestMove()
Move findBestMove(char board[boardY][boardX])
{
int bestVal = -1000;
Move bestMove;
bestMove.row = -1;
bestMove.col = -1;
for (int i = 0; i < boardY; i++)
{
for (int j = 0; j < boardX; j++) {
if (board[i][j] == ' ')
{
board[i][j] = player;
int moveVal = minimax(board, 0, false);
board[i][j] = ' ';
if (moveVal > bestVal)
{
bestMove.row = i;
bestMove.col = j;
bestVal = moveVal;
}
}
}
}
printf("The value of the best Move is : %d\n\n", bestVal);
return bestMove;
}
抱歉,如果这段代码太长。
minimax()
int minimax(char board[boardY][boardX], int depth, bool isMax) {
int score = evaluate(board);
if (score == 10)
return score;
if (score == -10)
return score;
if (isMovesLeft(board) == false)
return 0;
if (isMax)
{
int best = -1000;
for (int i = 0; i < boardY; i++) {
for (int j = 0; j < boardX; j++) {
if (board[i][j] == ' ')
{
board[i][j] == player;
best = max(best,
minimax(board, depth + 1, !isMax));
board[i][j] == ' ';
}
}
}
return best;
}
else // If Mini's move
{
int best = 1000;
for (int i = 0; i < boardY; i++) {
for (int j = 0; j < boardX; j++) {
if (board[i][j] == ' ')
{
board[i][j] = opponent;
best = min(best,
minimax(board, depth + 1, !isMax));
board[i][j] = ' ';
}
}
}
return best;
}
}
运行此功能的驱动程序代码如下:
Move move = findBestMove(board);
MakeMove(move, isPlayersTurn);
我是一名优秀的程序员,十分优秀!