Я изучаю, как алгоритм Minimax можно использовать для подключения четырех игр с обрезкой альфа-бета.Как эта функция оценки работает в игре Connect 4? (Java)
Так я просматривал исходный код о стратегии Connect4 игрока и нашел эту оценочную функцию:
/**
* Get the score of a board
*/
public int score(){
int score = 0;
for (int r= 0; r < ROWS; r++) {
if (r <= ROWS-4) {
for (int c = 0; c < COLS; c++) {
score += score(r, c);
}
} else {
for (int c = 0; c <= COLS-4; c++) {
score += score(r, c);
}
}
}
return score;
}
/**
* Helper method to get the score of a board
*/
public int score(int row, int col){
int score = 0;
boolean unblocked = true;
int tally = 0;
//int r, c;
if (row < ROWS-3) {
//check up
unblocked = true;
tally = 0;
for (int r=row; r<row+4; r++) {
if (board[r][col] == CHECKERS[1-playerToMoveNum]) {
unblocked = false;
}
if (board[r][col] == CHECKERS[playerToMoveNum]) {
tally ++;
}
}
if (unblocked == true) {
score = score + (tally*tally*tally*tally);
}
if (col < COLS-3) {
//check up and to the right
unblocked = true;
tally = 0;
for (int r=row, c=col; r<row+4; r++, c++) {
if (board[r][c] == CHECKERS[1-playerToMoveNum]) {
unblocked = false;
}
if (board[r][c] == CHECKERS[playerToMoveNum]) {
tally ++;
}
}
if (unblocked == true) {
score = score + (tally*tally*tally*tally);
}
}
}
if (col < COLS-3) {
//check right
unblocked = true;
tally = 0;
for (int c=col; c<col+4; c++) {
if (board[row][c] == CHECKERS[1-playerToMoveNum]) {
unblocked = false;
}
if (board[row][c] == CHECKERS[playerToMoveNum]) {
tally ++;
}
}
if (unblocked == true) {
score = score + (tally*tally*tally*tally);
}
if (row > 2) {
//check down and to the right
unblocked = true;
tally = 0;
for (int r=row, c=col; c<col+4; r--, c++) {
if (board[r][c] == CHECKERS[1-playerToMoveNum]) {
unblocked = false;
}
if (board[r][c] == CHECKERS[playerToMoveNum]) {
tally ++;
}
}
if (unblocked == true) {
score = score + (tally*tally*tally*tally);
}
}
}
return score;
}
я нашел весь этот код в этом PDF: http://ryanmaguiremusic.com/media_files/pdf/ConnectFourSource.pdf
Я просто хочу понять, как эта функция оценки работает и решает, какой лучший способ сделать ... Может ли кто-нибудь мне помочь? Было бы весьма полезно.