Hello,
I wrote a recursive program, but before it finishes it crashes with the error. Is it possible to prevent that? With treeDepth 1 it works, but with 2 or more it crashed.
function alphabeta(tempBoard, player, treeDepth, alpha, beta) {
var tempWinner = checkWin(tempBoard);
if (movesLeft(tempBoard) == 0 || tempWinner || treeDepth == 0) {
if (tempWinner == getEnemy(activePlayer)) {
return -1;
}
if (tempWinner == 0) {
return 0;
}
if (tempWinner == activePlayer) {
return 1;
}
return -2;
}
if (treeDepth == -1) {
treeDepth = movesLeft(tempBoard);
}
treeDepth--;
for (var i=0; i<9; i++) {
if (tempBoard[i] == 0) {
tempBoard[i] = player;
var results = alphabeta(tempBoard, getEnemy(player), treeDepth, -2, 2);
tempBoard[i] = 0;
if (player == activePlayer) {
if (results > alpha) {
alpha = results;
}
if (alpha >= beta) {
return beta;
}
} else {
if (results < beta) {
beta = results;
}
if (beta <= alpha) {
return alpha;
}
}
}
}
if (player == activePlayer) {
return alpha;
} else {
return beta;
}
}
function computerMove(tempBoard, player) {
var result;
var bestMove = -2;
if (movesLeft(tempBoard) == 9) {
setMarker(4);
return;
}
var choices = [];
for (var i=0; i<9; i++) {
if (tempBoard[i] == 0) {
tempBoard[i] = player;
var results = alphabeta(tempBoard, getEnemy(player), 2, -2, 2);
tempBoard[i] = 0;
if (results > bestMove) {
bestMove = results;
choices = [];
choices.add(i);
} else if (results == bestMove) {
choices.add(i);
}
}
}
// ToDo: Shuffle List
setMarker(choices[0]);
}