public int minimax(Board b) { //player1 is AI
//depth+=10;
System.out.println("Current board is ");
System.out.println("To play now on this board is " + b.whoseTurn.getId());
b.display();
if((GameController.hasWon(b.whoseTurn,b))
|| (GameController.hasWon(b.whoseNotInTurn, b))
|| (GameController.isDraw(b.whoseTurn,b,b.whoseNotInTurn))) {
return evaluate(b);
}
ArrayList<Integer> possibleMoves = generateMoves(b);
if(b.whoseTurn.getId() == "AI") {
bestScore = -1000000;
for(int i = 0; i < possibleMoves.size(); i++) {
int move = possibleMoves.get(i);
b.myBoard.get(move).setSymbol(b.whoseTurn.getSymbol());
swapPlayers(b);
score = minimax (b);
if(score > bestScore) {
bestScore = score;
bestMove = move;
System.out.println("In maximum Move is " + move + "BESTScore is" + score);
}
unmakeMove(b.myBoard.get(move));
}
return bestMove;
}
else {
bestScore = 1000000;
for(int i = 0; i < possibleMoves.size(); i++) {
int move = possibleMoves.get(i);
b.myBoard.get(move).setSymbol(b.whoseTurn.getSymbol());
swapPlayers(b);
score = minimax(b);
if(score < bestScore) {
myMoves.add(move);
bestScore = score;
bestMove = move;
System.out.println("In minimum Move is " + move + "Score is" + score);
}
unmakeMove(b.myBoard.get(move));
}
return bestMove;
}
여기서 내가 실수를합니까? Here은 전체 코드에 대한 링크입니다.Java에서 minimax 알고리즘을 코딩했습니다. 그러나, 그것은 잘못된 최선의 움직임을 제공합니다. 어떤 제안?
무엇을해야합니까? 코드 덤프는 SO 질문에 대한 최선의 방법이 아닙니다. –
이 코드의 문제점은 무엇입니까? –
문제의 원인이되는 부분 만 코드 샘플을 분리하면 도움이됩니다. 또한 다른 클래스가 필요없이 그냥 놓고 실행할 수있는 경우 도움이됩니다. [SSCCE] (http://meta.stackexchange.com/questions/22754/sscce-how-to-provide-examples-for-programming-questions) – crownjewel82