Эвристика для 3D крестики-нолики - PullRequest
0 голосов
/ 27 сентября 2018

В настоящее время я пытаюсь реализовать эвристику для 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, поэтому я прошу помощи, есть ли очевидная ошибка в моем способе оценки доски?

...