Gomoku оценить функцию в Java
Я реализовал класс Player Gomoku Player, который использует альфа-бета-обрезку, чтобы выбрать наилучший возможный ход для компьютера, но у меня возникли проблемы при разработке того, как написать функцию оценки для правильной оценки каждой позиции на доске.
У меня есть метод "valuBoard", который оценивает положение доски и обновляет количество черных, белых или пустых позиций в каждой строке, столбце и диагонали. Мой метод ScoreChange оценивает каждую позицию, и именно здесь я чувствую, что моя программа делает ошибки, поскольку она не блокирует меня, когда у меня 3 или 4 подряд.
Как правильно оценить и оценить каждую позицию?
public int evaluateBoard(Color[][] board, Color computer) {
int score = 0;
//Check all the rows
for (int i = 0; i < 8; ++i) {
int blank = 0;
int black = 0;
int white = 0;
for (int j = 0; j < 8; ++j) {
if (board[i][j] == null) {
blank++;
} else if (board[i][j] == Color.black) {
black++;
} else {
white++;
}
}
score+=scoreChange(black, white, computer);
}
//Check all the columns
for (int j = 0; j < 8; ++j) {
int blank = 0;
int black = 0;
int white = 0;
for (int i = 0; i < 8; ++i) {
if (board[i][j] == null) {
blank++;
} else if (board[i][j] == Color.black) {
black++;
} else {
white++;
}
}
score+=scoreChange(black, white, computer);
}
int blank = 0;
int black = 0;
int white = 0;
//Check diagonal (first)
for (int i = 0, j = 0; i < 8; ++i, ++j) {
if (board[i][j] == Color.black) {
black++;
} else if (board[i][j] == Color.white) {
white++;
} else {
blank++;
}
}
score+=scoreChange(black, white, computer);
blank = 0;
black = 0;
white = 0;
//Check Diagonal (Second)
for (int i = 7, j = 0; i > -1; --i, ++j) {
if (board[i][j] == Color.black) {
black++;
} else if (board[i][j] == Color.white) {
white++;
} else {
blank++;
}
}
score+=scoreChange(black, white, computer);
return score;
}
private int scoreChange(int black, int white){
int change;
if (black == 5) {
change = -10000;
} else if (black == 4 && white == 0) {
change = -1000;
} else if (black == 3 && white == 0) {
change = -100;
} else if (black == 2 && white == 0) {
change = -10;
} else if (black == 1 && white == 0) {
change = -1;
} else if (white == 5) {
change = 10000;
} else if (white == 4 && black == 0) {
change = 1000;
} else if (white == 3 && black == 0) {
change = 100;
} else if (white == 2 && black == 0) {
change = 10;
} else if (white == 1 && black == 0) {
change = 1;
} else {
change = 0;
}
return change;
}