// 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].c==color && 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);
this.kingPos[oppCol] = [-1,-1];
this.castleFlags[oppCol] = [false,false];
}
+ // Did we move our (init) rooks or opponents' ones ?
+ const firstRank = (c == "w" ? 7 : 0);
+ const oppFirstRank = 7 - firstRank;
+ const oppCol = this.getOppCol(c);
+ move.vanish.forEach(psq => {
+ if (psq.x == firstRank && this.INIT_COL_ROOK[c].includes(psq.y))
+ this.castleFlags[c][psq.y==this.INIT_COL_ROOK[c][0] ? 0 : 1] = false;
+ else if (psq.x == oppFirstRank && this.INIT_COL_ROOK[oppCol].includes(psq.y))
+ this.castleFlags[oppCol][psq.y==this.INIT_COL_ROOK[oppCol][0] ? 0 : 1] = false;
+ });
}
unupdateVariables(move)
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);
- }
}