Проблема в алгоритме miniMax для крестиков-ноликовC++

Программы на C++. Форум разработчиков
Anonymous
Проблема в алгоритме miniMax для крестиков-ноликов

Сообщение Anonymous »

Я пытался написать игру в крестики-нолики, в которой вы можете играть против кого-то другого на локальном компьютере или против бота. Бот использует алгоритм минимакс. Однако что-то не так в том, что я написал. Бот может контратаковать игрока, но при такой возможности он не делает победный ход. Я не мог понять почему.
В принципе у меня проблема только в главном->GameAgainstComputer->findBestMove->miniMax
(Доска - это 2d векторный массив символов)
весь код здесь
важные части кода:
#include
#include
#include
#include

using namespace std;

#define INFINITY INT_MAX

bool GameIsOver(vector& board, char& winner)
{
for(int i = 0 ; i < 3 ; i++)
{
if(board[0] == board[1] && board[1] == board[2])
{
winner = board[0];
return true;
}
}
for(int i = 0 ; i < 3 ; i++)
{
if(board[0] == board[1] && board[1] == board[2])
{
winner = board[0];
return true;
}
}
if(board[0][0] == board[1][1] && board[1][1] == board[2][2])
{
winner = board[0][0];
return true;
}
else if(board[2][0] == board[1][1] && board[1][1] == board[0][2])
{
winner = board[2][0];
return true;
}
return false;
}

bool isMovesLeft(vector& board)
{
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
if (board[i][j] != 'X' && board[i][j] != 'O')
return true;
return false;
}

int evaluate(vector& board)
{
char winner = ' ';
if (GameIsOver(board, winner))
{
if (winner == 'X')
return 10;
else if (winner == 'O')
return -10;
}
return 0;
}

int miniMax(vector& board, int depth, bool isMaximising)
{
int score = evaluate(board);

if (score >= 10 || score bestVal)
{
bestMove = {i, j};
bestVal = moveVal;
}
}
}
}
return bestMove;
}
int main()
{
vector board(3, vector(3));

GameAgainstComputer(board);

return 0;
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... ic-tac-toe

Вернуться в «C++»