我正在連接4 AI,除非遊戲繼續,直到所有42個空格填滿。
得分由連續4位保持得1分。Minimax連接4 AI故障
public int[] Max_Value(GameBoard playBoard, int depth){
GameBoard temp = new GameBoard(playBoard.playBoard);
int h = 0, tempH = 999, tempCol=0;
int myDepth = depth - 1;
int[] tempH2 = new int[2];
boolean noChildren = true;
if(myDepth != -1){
for(int i = 0; i < 7; i++){
if(temp.isValidPlay(i)){
count++;
temp.playPiece(i);
noChildren = false;
tempH2 = Min_Value(temp, myDepth);
if(tempH2[1] < tempH){
tempH=tempH2[1];
tempCol = i;
}
temp.removePiece(i);
}
}
}
int[] x = new int[2];
if(noChildren){
h = temp.getHeuristic();
}
else{
h = tempH;
x[0]=tempCol;
}
x[1]=h;
return x;
}
public int[] Min_Value(GameBoard playBoard, int depth){
GameBoard temp = new GameBoard(playBoard.playBoard);
int h = 0, tempH = -999, tempCol=0;
int myDepth = depth - 1;
int[] tempH2 = new int[2];
boolean noChildren = true;
if(myDepth != -1){
for(int i = 0; i < 7; i++){
if(temp.isValidPlay(i)){
count++;
temp.playPiece(i);
noChildren = false;
tempH2 = Max_Value(temp, myDepth);
if(tempH2[1] > tempH){
tempH=tempH2[1];
tempCol = i;
}
temp.removePiece(i);
}
}
}
int[] x = new int[2];
if(noChildren){
h = temp.getHeuristic();
}
else{
h = tempH;
x[0]=tempCol;
}
x[1]=h;
return x;
}
我覺得我只是偶然發現了一切,感覺就像可怕的代碼。不過,我從來沒有嘗試過這樣的事情,並希望得到任何意見。我不知道我哪裏錯了。對於任何給定的狀態,我的評估函數只能爲每個連續4個點提供1個點。主函數調用Min_Value函數以深度爲10開始。
我試圖返回列以及啓發式的值。我希望我已經提供了足夠的信息。感謝您的任何見解。
謝謝。我剛剛開始使用糟糕的評估功能,以確保至少工作,因爲它更容易檢查。我只是在最上面一行是空的板子上檢查它(只剩下7步)。然而,儘管有一個連接,但它仍然不會做出連接4的動作。而且,當我試圖在空板上運行它時,該程序即使在深度爲5時也會失速,我認爲它不應該。我認爲時間將在深度5的空板上達到7^5。再次感謝。 – user2587878
@ user2587878好吧,最酷的是我可以將它粘貼到visual studio中,並用優秀的調試器進行調試。我會盡力在今天晚些時候解決這個問題,並在這裏發佈另一個答案,如果我能找到這個錯誤。 – xXliolauXx
編輯:請注意,您的方法名是反轉的,您的Min方法會計算最大化的球員值=>可能會導致混淆 – xXliolauXx