В настоящее время я пытаюсь реализовать эвристику для 3D крестики-нолики, но мне кажется, что мой счетчик - верный путь, f, но я не уверен, где я сделал неправильно, я не собираюсь публиковать всекода, так как он много, но вот часть:
public void countDiagonal(GameState gameState) {
/*
* yz-plane (negativ)
*/
int z;
for (int x = 0; x < GameState.BOARD_SIZE; x++) {
for (int y = 0; y < GameState.BOARD_SIZE; y++) {
z = y;
if (gameState.at(x, y, z) == myPlayer) {
myCounter++;
opponentCounter = 0;
}
if (gameState.at(x, y, z) == opponentPlayer) {
opponentCounter++;
myCounter = 0;
}
if (gameState.at(x, y, z) == Constants.CELL_EMPTY) {
emptyCells++;
}
}
evaluateBoard();
myCounter = 0;
opponentCounter = 0;
emptyCells = 0;
}
Оценка делается здесь:
public void evaluateBoard() {
if (myCounter == 1 && emptyCells == 3) {
myScore = myScore + 5;
}
if (myCounter == 2 && emptyCells == 2) {
myScore = myScore + 10;
}
if (myCounter == 3 && emptyCells == 1) {
myScore = myScore + 20;
}
if (myCounter == 4) {
myScore = myScore + 1000;
}
if (opponentCounter == 1 && emptyCells == 3) {
opponentScore = opponentScore + 5;
}
if (opponentCounter == 2 && emptyCells == 2) {
opponentScore = opponentScore + 10;
}
if (opponentCounter == 3 && emptyCells == 1) {
opponentScore = opponentScore + 20;
}
if (opponentCounter == 4) {
opponentScore = opponentScore + 1000;
}
}
Когда я пытаюсь запустить его, я использую альфа-бетаобрезать, но кажется, что вычисления сделаны ужасно неправильно, когда я использую значение, я беру myScore - oppScore, и я использую альфа-бета-дерево с глубиной 1, но даже после одного хода я теряю -15в пунктах, поскольку я новичок в Java, поэтому я прошу помощи, есть ли очевидная ошибка в моем способе оценки доски?