이것은 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;
}
}
브 루트 포스? 어떤 옵션이 있습니까? –
이 줄로 판단 :'move = mRand.nextInt (getBOARD_SIZE()); '승리하는 움직임이 없다면 완전히 무작위로 보인다. 중간 사각형을 먼저 잡는 것과 같은 전략은 없다. –
당신이 말하는 특정 섹션이 있습니까? 여기에는 알고리즘이라는 용어를 많이 사용하지 않습니다. – MrWizard54