Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.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 以下代码的算法名是什么?_Java_Android_Tic Tac Toe - Fatal编程技术网

Java 以下代码的算法名是什么?

Java 以下代码的算法名是什么?,java,android,tic-tac-toe,Java,Android,Tic Tac Toe,这是一个android tic-tac-toe游戏的代码。但我不明白他们用的是什么算法?有人能说出这里使用的是哪种算法吗 package va.indiedevelopment.tictactoe; import java.util.Random; public class TicTacToeGame { private char mBoard[]; private final static int BOARD_SIZE = 9; public static fi

这是一个android tic-tac-toe游戏的代码。但我不明白他们用的是什么算法?有人能说出这里使用的是哪种算法吗

package va.indiedevelopment.tictactoe;

import java.util.Random;

public class TicTacToeGame {

    private char mBoard[];
    private final static int BOARD_SIZE = 9;

    public static final char HUMAN_PLAYER = 'X';
    public static final char ANDROID_PLAYER = '0';
    public static final char EMPTY_SPACE = ' ';

    private Random mRand;

    public static int getBOARD_SIZE() {
        return BOARD_SIZE;
    }

    public TicTacToeGame(){

        mBoard = new char[BOARD_SIZE];

        for (int i = 0; i < BOARD_SIZE; i++)
            mBoard[i] = EMPTY_SPACE;

        mRand = new Random();
    }

    public void clearBoard()
    {
        for (int i = 0; i < BOARD_SIZE; i++)
        {
            mBoard[i] = EMPTY_SPACE;
        }
    }

    public void setMove(char player, int location)
    {
        mBoard[location] = player;
    }

    public int getComputerMove()
    {
        int move;

        for (int i = 0; i < getBOARD_SIZE(); i++)
        {
            if (mBoard[i] != HUMAN_PLAYER && mBoard[i] != ANDROID_PLAYER)
            {
                char curr = mBoard[i];
                mBoard[i] = ANDROID_PLAYER;
                if (checkForWinner() == 3)
                {
                    setMove(ANDROID_PLAYER, i);
                    return i;
                }
                else
                    mBoard[i] = curr;
            }
        }

        for (int i = 0; i < getBOARD_SIZE(); i++)
        {
            if (mBoard[i] != HUMAN_PLAYER && mBoard[i] != ANDROID_PLAYER)
            {
                char curr = mBoard[i];
                mBoard[i] = HUMAN_PLAYER;
                if (checkForWinner() == 2)
                {
                    setMove(ANDROID_PLAYER, i);
                    return i;
                }
                else
                    mBoard[i] = curr;
            }
        }

        do
        {
            move = mRand.nextInt(getBOARD_SIZE());
        } while (mBoard[move] == HUMAN_PLAYER || mBoard[move] == ANDROID_PLAYER);

            setMove(ANDROID_PLAYER, move);
        return move;
    }

    public int checkForWinner()
    {
        for (int i = 0; i <= 6; i += 3)
        {
            if (mBoard[i] == HUMAN_PLAYER &&
                mBoard[i+1] == HUMAN_PLAYER &&
                mBoard[i+2] == HUMAN_PLAYER)
                return 2;
            if (mBoard[i] == ANDROID_PLAYER &&
                mBoard[i+1] == ANDROID_PLAYER &&
                mBoard[i+2] == ANDROID_PLAYER)
                return 3;
        }

        for (int i = 0; i <= 2; i++)
        {
            if (mBoard[i] == HUMAN_PLAYER &&
                mBoard[i+3] == HUMAN_PLAYER &&
                mBoard[i+6] == HUMAN_PLAYER)
                return 2;
            if (mBoard[i] == ANDROID_PLAYER &&
                mBoard[i+3] == ANDROID_PLAYER &&
                mBoard[i+6] == ANDROID_PLAYER)
                return 3;
        }

        if ((mBoard[0] == HUMAN_PLAYER &&
             mBoard[4] == HUMAN_PLAYER &&
             mBoard[8] == HUMAN_PLAYER) ||
             mBoard[2] == HUMAN_PLAYER &&
             mBoard[4] == HUMAN_PLAYER &&
             mBoard[6] == HUMAN_PLAYER)
             return 2;
        if ((mBoard[0] == ANDROID_PLAYER &&
             mBoard[4] == ANDROID_PLAYER &&
             mBoard[8] == ANDROID_PLAYER) ||
             mBoard[2] == ANDROID_PLAYER &&
             mBoard[4] == ANDROID_PLAYER &&
             mBoard[6] == ANDROID_PLAYER)
             return 3;

        for (int i = 0; i < getBOARD_SIZE(); i++)
        {
            if (mBoard[i] != HUMAN_PLAYER && mBoard[i] != ANDROID_PLAYER)
                return 0;
        }

        return 1;
    }
}
包va.indiedevelopment.tictactoe;
导入java.util.Random;
公共类游戏{
私有字符mBoard[];
专用最终静态int板_尺寸=9;
public static final char HUMAN_PLAYER='X';
公共静态最终字符ANDROID_播放器='0';
公共静态最终字符空_空格=“”;
私有随机随机随机数;
公共静态int getBOARD_SIZE(){
返回板尺寸;
}
公共游戏{
mBoard=新字符[板大小];
对于(int i=0;i对于(inti=0;i,他们通过查看单元格明确检查每一个可能获胜的动作


我认为这是一个有深度限制的搜索。它向前看了一步

它会检查它是否能赢。如果它不能赢,那么它会检查人类是否能做出让人类赢的动作,如果有让人类赢的动作,那么它会占据那个位置


如果它找不到一个赢的招式或一个输的招式,它只会随机选择一个空格

它会进行几乎所有可能的检查。
这是一个.

暴力?有什么选择?从这行判断:
move=mRand.nextInt(getBOARD\u SIZE())
除非有一个成功的动作,否则它看起来完全是随机的-没有策略,比如先抓住中间的方块。你指的是一个特定的部分吗?这里没有多少算法。它不是,它只看当前的动作我指的是所有可能的动作,可以在之后进行。它是的不是,它只看当前的移动