1
我試圖掌握MiniMax算法,並且已經閱讀了它。我最初的方法是實現一個簡單的MiniMax算法,然後添加alpha-beta修剪。然而,這是我當前的代碼:用於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 |
在我的第二次嘗試我試過4,3,它擋住了我獲勝的舉動。
| | O | |
| X | X | O |
| | | |
我想任何人都可以指出什麼是錯我的執行?
你可能會在http://codereview.stackexchange.com得到更多的建議 – Chris