私はMiniMaxアルゴリズムの理解を得ようとしていて、それを読み上げました。私の最初のアプローチは、単純なMiniMaxアルゴリズムを実装し、次にアルファベータプルーニングを追加することでした。しかし、これは私の現在のコードです:JavaのTicTacToe AIのための最も簡単なMiniMaxアルゴリズム
public int miniMax(char[] node, int playerNum)
{
int victor = checkWin(node); // returns 0 if game is ongoing, 1 for p1, 2 for p2, 3 for tie.
if(victor != 0) //game over .
return score(victor);
if(playerNum == 2) //AI
{
int bestVal = Integer.MIN_VALUE;
int bestSpot = 0;
for(int i = 0; i < node.length; i++)
{
if(node[i] != '-')
continue;
node[i] = getSymbol(playerNum);
int value = miniMax(node, 1);
if(value > bestVal)
{
bestVal = value;
bestSpot = i;
}
node[i] = '-';
}
return bestSpot;
}
else
{
int bestVal = Integer.MAX_VALUE;
int bestSpot = 0;
for(int i = 0; i < node.length; i++)
{
if(node[i] != '-')
continue;
node[i] = getSymbol(playerNum);
int value = miniMax(node, 2);
if(value < bestVal)
{
bestVal = value;
bestSpot = i;
}
node[i] = '-';
}
return bestSpot;
}
}
そして、私のスコア関数
private int Score(int gameState)
{
if(gameState ==2) //O wins.
return 10;
else if(gameState==1) //X wins
return -10;
return 0;
}
は今、私は、しかし、時にはそれが非インテリジェントな選択をしている、私の移動を阻止し、勝つためにしようと取り組んでAIを持っています例えば、コンソールからの入力がこの順に6,7,8であれば、これは私が得る出力です。私の勝利を阻止しようとはしません。しかし、他の場合にはそうです。
| O | O | |
| | | |
| X | X | X |
私の2回目の試行では、私は4,3を試して勝利の動きをブロックしました。
| | O | |
| X | X | O |
| | | |
私の実装で何が間違っていると指摘できましたか?
あなたはおそらくhttp://codereview.stackexchange.comでより多くのアドバイスを取得します – Chris