I am creating a checkers game but My miniMax is not functioning properly,it is always switching between two positions for its move(index 20 and 17).Here is my code:
public double MiniMax(int[] board, int depth, int turn, int red_best, int black_best)
{
int source;
int dest;
double MAX_SCORE=-INFINITY,newScore;
int MAX_DEPTH=3;
int[] newBoard=new int[32];
generateMoves(board,turn);
System.arraycopy(board, 0, newBoard, 0, 32);
if(depth==MAX_DEPTH)
{ return Evaluation(turn,board);}
for(int z=0;z<possibleMoves.size();z+=2){
source=Integer.parseInt(possibleMoves.elementAt(z).toString());
System.out.println("SOURCE= "+source);
dest=Integer.parseInt(possibleMoves.elementAt(z+1).toString());//(int[])possibleMoves.elementAt(z+1);
System.out.println("DEST = "+dest);
applyMove(newBoard,source,dest);
newScore=MiniMax(newBoard,depth+1,opponent(turn),red_best, black_best);
if(newScore>MAX_SCORE)
{MAX_SCORE=newScore;maxSource=source; maxDest=dest;}//maxSource and maxDest will be used to perform the move.
if (MAX_SCORE > black_best)
{
if (MAX_SCORE >= red_best)
break; /* alpha_beta cutoff */
else
black_best = (int) MAX_SCORE; //the_score
}
if (MAX_SCORE < red_best)
{
if (MAX_SCORE<= black_best)
break; /* alpha_beta cutoff */
else
red_best = (int) MAX_SCORE; //the_score
}
}//for ends
return MAX_SCORE;
} //end minimax
I am unable to find out the logical mistake. Any idea what's going wrong?