Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 求解tictactoe最佳移动的minimax算法_Java_Minimax - Fatal编程技术网

Java 求解tictactoe最佳移动的minimax算法

Java 求解tictactoe最佳移动的minimax算法,java,minimax,Java,Minimax,我正在尝试用android创建一个Tictatcoe游戏,使用minimax算法为电脑找到最佳的移动方式。但它每次都返回板上的下一个可用位置。我试图寻找这个问题的教程和解决方案,但仍然没有答案 这是我的代码,我试过的 private void compMove() { final String pos =bestMove(); matrix[turn][turn2] = 'O'; vars.get(pos).setImageDrawable(getDrawable(R.

我正在尝试用android创建一个Tictatcoe游戏,使用minimax算法为电脑找到最佳的移动方式。但它每次都返回板上的下一个可用位置。我试图寻找这个问题的教程和解决方案,但仍然没有答案

这是我的代码,我试过的

private void compMove() {
    final String pos =bestMove();

    matrix[turn][turn2] = 'O';
    vars.get(pos).setImageDrawable(getDrawable(R.drawable.zero)); //put O in position
    whosmov="pm";
    getWinner(checkWinner());               //check if O has won
    }

    //finding best possible move for computer
    private String bestMove(){
        int bestscore=100,a=0,b=0;
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                if(matrix[i][j]==0){
                    matrix[i][j]='O';
                    int score=miniMax(matrix,0,true);
                    matrix[i][j]=0;
                    if(score<bestscore){
                        a=i;
                        b=j;
                        bestscore=score;
                    }
                }
            }
        }
        turn=a;         //position x for matrix
        turn2=b;        //position y for matrix
        return a+""+b;
    }

private int miniMax(char[][] matrix,int depth,boolean ismax) {
    int result=checkWinner();

    if(result!=0){
        return result;
    }

    if(ismax){
        int best = -100;
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                if(matrix[i][j]==0){
                    matrix[i][j]='X';
                  int score = miniMax(matrix,depth+1, false);
                  best=Math.max(score,best);
                    matrix[i][j]=0;
                }
            }
        }
        return best;
    }
    else{
        int best = 100;
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                if(matrix[i][j]==0){
                    matrix[i][j]='O';
                    int score = miniMax(matrix,depth+1, true);

                    best=Math.min(score,best);
                    matrix[i][j]=0;
                }
            }
        }
        return best;
    }
}

private int checkWinner() {
        //horizontal check
        for(int i=0;i<3;i++){
            if(matrix[i][0]==matrix[i][1] && matrix[i][1]==matrix[i][2]){
                if(matrix[i][0]=='X'){
                    return 1;
                }
                if(matrix[i][0]=='O'){
                    return -1;
                }
            }
        }
        //vertical check
    for(int i=0;i<3;i++){
        if(matrix[0][i]==matrix[1][i] && matrix[2][i]==matrix[0][i]){
            if(matrix[0][i]=='X'){
                return 1;
            }
            if(matrix[0][i]=='O'){
                return -1;
            }
        }
    }
    // Diagonal check
    if(matrix[0][0]==matrix[1][1] && matrix[1][1]== matrix[2][2]){
        if(matrix[0][0]=='X'){
            return 1;
        }
        if(matrix[0][0]=='O'){
            return -1;
        }
    }
    if(matrix[2][0]==matrix[1][1] && matrix[1][1]== matrix[0][2]){
        if(matrix[2][0]=='X'){
            return 1;
        }
        if(matrix[2][0]=='O'){
            return -1;
        }

    }

    return 0;

}
private void compMove(){
最终字符串pos=bestMove();
矩阵[turn][turn2]=“O”;
vars.get(pos.setImageDrawable(getDrawable(R.drawable.zero));//将O放置到位
whosmov=“pm”;
getWinner(checkWinner());//检查O是否赢了
}
//为计算机寻找最佳可能的移动
私有字符串bestMove(){
int最佳分数=100,a=0,b=0;

对于(int i=0;i)这可能会有帮助。没有帮助对不起,我不明白我做错了什么。