我正在连接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