int miniMaxAlphaBeta(char chess[16][18],int alpha,int beta, int depth,bool isMaxPlayer)//minimax elevate with alpha beta algorithm
{
if (depth == 0)//terminal state
return Evaluate(chess);
if (isMoveLeft())
return 0;
else
{
if (isMaxPlayer)//for computer
{
int best = MIN;//- vô cùng
bool checkBreak = false;
for(int i = 0; i < 16; i ++)
{
for (int j = 0; j < 18; j++)
{
//do move
chess_ox[i][j] = comp;//comp=x
int value = miniMaxAlphaBeta(alpha, beta, depth - 1, false);
//deletes moves
chess_ox[i][j] = '_';
best = max(value, best);
alpha = max(alpha, best);
if (beta <= alpha)
{
checkBreak = true;
break;
}
}
if (checkBreak) break;
}
return best;
}
else//player
{
int best = MAX;//+ vô cugf
bool checkBreak = false;
for (int i = 0 ; i < 16; i++)
{
for (int j = 0; j < 18; j++)
{
//do move
chess_ox[i][j] = player;//player=O;
int value = miniMaxAlphaBeta(alpha, beta, depth - 1, true);
//deletes moves
chess_ox[i][j] = '_';
best = min(value, best);
beta = min(beta, best);
if (beta <= alpha)
{
checkBreak = true;
break;
}
}
if (checkBreak) break;
}
return best;
}
}
}
mình có làm game caro sử dụng thuật toán minimax, đây là hàm minimax của mình, mình có thắc mắc là cái hàm evaluate dùng để đánh giá bàn cờ, mình phải xây dựng nó để tính điểm cho cả x và o đúng không ạ? kiểu như 4 con x thì +1000 điểm hay 3 con O thì là điểm trả về là -500 . mình có tìm hiểu trên mạng nhưng nó nói chung chung quá khó hiểu, mình là người mới nhờ mọi người giúp đỡ ạ
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?