+ const oppCol = V.GetOppCol(this.turn);
+
+ // Search best (half) move for opponent turn
+ const getBestMoveEval = () => {
+ let score = this.getCurrentScore();
+ if (score != "*") return maxeval * (score == "1-0" ? 1 : -1);
+ let moves = this.getAllValidMoves();
+ let res = oppCol == "w" ? -maxeval : maxeval;
+ for (let m of moves) {
+ this.play(m);
+ score = this.getCurrentScore();
+ if (score != "*") {
+ // King captured
+ this.undo(m);
+ return maxeval * (score == "1-0" ? 1 : -1);
+ }
+ const evalPos = this.evalPosition();
+ res = oppCol == "w" ? Math.max(res, evalPos) : Math.min(res, evalPos);
+ this.undo(m);
+ }
+ return res;
+ };
+