3D井字游戏的启发式

时间:2018-09-27 15:12:06

标签: java tic-tac-toe alpha-beta-pruning

目前,我正在尝试为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;
        }
    }

当我尝试运行它时,我使用的是alpha-beta修剪,但是看来计算做得很糟糕,当我使用该值时,我选择了myScore -kernelScore,并且我使用了深度为1的alpha-beta树,但是即使只玩了一个动作,我还是跌了-15点,因为我是Java的菜鸟,因此我寻求帮助,我尝试评估棋盘的方式是否存在明显的错误? >

0 个答案:

没有答案