minmax AI로 Java에서 간단한 체커 게임을 만들었지 만 작동하지 않습니다. 나는 minmax의 재귀 적 버전을 사용한다. 그러나 움직임이 가장 좋지는 않지만, 아마도 처음 생성 된 것이므로, 무언가 잘못되어있을 것이다.CheckMax 용 MinMax AI
public int minmax(int [][] board, int depth, int curPlayer){
ArrayList<Move> moves = findMoves(curPlayer, board);
if (depth == 0 || moves.size() == 0){
return heurValue(curPlayer, board);
}
int bestVal = 0;
if (curPlayer == GameCore.BLACK){
bestVal = Integer.MIN_VALUE;
curPlayer = GameCore.RED;
}else{
bestVal = Integer.MAX_VALUE;
curPlayer = GameCore.BLACK;
}
for(int i = 0; i<moves.size(); i++){
Move m = moves.get(i);
int [][] boardNew = makeMove(m, board);
int value = minmax(boardNew, depth-1, curPlayer);
board = undoMove(m, boardNew);
// computer plays as black
if (curPlayer == GameCore.BLACK){
if (value < bestVal){
bestMove = m;
bestVal = value;
}
}else{
if (value >= bestVal){
bestMove = m;
bestVal = value;
}
}
}
return bestVal;
}
I 깊이 = 1 MINMAX를 호출하는 경우는 "7 개 값을 반환한다 (도 7 개 가능한 이동 임)하지만 2,4에서 3,3-로 이동하는 경우에만 1 반환하지만 때 내가 그것을 디버깅하려, ArrayList 이동 크기가 정확합니다. : (
편집 : "return"나는 실수로 첫 번째 조건을 의미합니다 (깊이가 0이거나 움직임이 비어 있음) 한 번만 발생하지만 올바른 경우 7 번 발생합니다. 내 나쁜 영어로 죄송합니다.
아시나요? 사이트, 어디 minmax에 대한 올바른 재귀 의사 코드 (더 나은 알파/베타, 왜냐하면 내가 그것을 확장해야합니다) 또는이 문제를 해결하는 데 도움이 될 수 있습니까? 그것은 사소한 일일뿐입니다. 감사합니다.
질문을 올바르게 읽지는 않았지만'public int minmax (int [] [] board, int depth, int curPlayer)'int 형의 값 하나만 반환합니다. 많은 값을 반환하기를 원한다면'LinkedList'와 비슷한'Collection'을 돌려 줄 수 있습니다. –
어디에서 boardNew를 선언 했습니까? – Joan
RED (인간)가 게임을 시작하면, 자신의 차례 (컴퓨터가 작동) 후 minmax가 호출됩니다 (깊이 1의 테스트 용). 컴퓨터에는 7 가지 방법이 있습니다. MinMax는 7 개의 가능한 보드에 대해 7 개의 값을 반환해야하지만 그렇지 않습니다. bestMove는 전역 변수입니다. 내 하찮은 영어 실력에 죄송하다는 말씀을 드리고 싶습니다. – user2275785