- // Second half-move:
- let moves2 = this.getAllValidMoves();
- // If no possible moves AND underCheck, eval2 is correct.
- // If !underCheck, eval2 is 0 (stalemate).
- if (moves2.length == 0 && this.checkGameEnd() == "1/2")
- eval2 = 0;
- for (let j=0; j<moves2.length; j++)
+ let eval2 = undefined;
+ if (this.atLeastOneMove())
+ {
+ eval2 = (color=="w" ? 1 : -1) * maxeval; //initialized with checkmate value
+ // Second half-move:
+ let moves2 = this.getAllValidMoves("computer");
+ for (let j=0; j<moves2.length; j++)
+ {
+ this.play(moves2[j]);
+ let evalPos = undefined;
+ if (this.atLeastOneMove())
+ evalPos = this.evalPosition()
+ else
+ {
+ // Work with scores for Loser variant
+ const score = this.checkGameEnd();
+ evalPos = (score=="1/2" ? 0 : (score=="1-0" ? 1 : -1) * maxeval);
+ }
+ if ((color == "w" && evalPos < eval2) || (color=="b" && evalPos > eval2))
+ eval2 = evalPos;
+ this.undo(moves2[j]);
+ }
+ }
+ else