// Scan move for pawn (max 1) on 8th rank
for (let i=1; i<move.appear.length; i++)
{
- if (move.appear[i].p==V.PAWN && move.appear[i].x==lastRank)
+ if (move.appear[i].p==V.PAWN && move.appear[i].c==color && move.appear[i].x==lastRank)
{
move.appear[i].p = V.ROOK;
moves.push(move);
// No valid move: our king disappeared
return this.turn == "w" ? "0-1" : "1-0";
}
+
+ static get THRESHOLD_MATE() {
+ return 500; //checkmates evals may be slightly below 1000
+ }
+
+ getComputerMove()
+ {
+ let moves1 = this.getAllValidMoves();
+ // Can I mate in 1 ?
+ for (let i of _.shuffle(_.range(moves1.length)))
+ {
+ this.play(moves1[i]);
+ const finish = (Math.abs(this.evalPosition()) >= VariantRules.THRESHOLD_MATE);
+ this.undo(moves1[i]);
+ if (finish)
+ return moves1[i];
+ }
+ return super.getComputerMove(moves1);
+ }
}