this.enlightened["w"][move.end.x][move.end.y] = true;
for (let move of movesBlack)
this.enlightened["b"][move.end.x][move.end.y] = true;
+ // Include en-passant capturing square if any:
+ let moves = currentTurn == "w" ? movesWhite : movesBlack;
+ for (let m of moves) {
+ if (
+ m.appear[0].p == V.PAWN &&
+ m.vanish.length == 2 &&
+ m.vanish[1].x != m.end.x
+ ) {
+ const psq = m.vanish[1];
+ this.enlightened[currentTurn][psq.x][psq.y] = true;
+ break;
+ }
+ }
+ }
+
+ filterValid(moves) {
+ // Used in the interface
+ return moves;
}
// Has to be redefined to avoid an infinite loop
// Can I take something ? If yes, do it if it seems good...
if (move.vanish.length == 2 && move.vanish[1].c != color) {
- //avoid castle
+ // OK this isn't a castling move
const myPieceVal = V.VALUES[move.appear[0].p];
const hisPieceVal = V.VALUES[move.vanish[1].p];
- if (myPieceVal <= hisPieceVal) move.eval = hisPieceVal - myPieceVal + 2;
- //favor captures
+ // Favor captures
+ if (myPieceVal <= hisPieceVal) move.eval = hisPieceVal - myPieceVal + 1;
else {
// Taking a pawn with minor piece,
// or minor piece or pawn with a rook,
// or anything but a queen with a queen,
// or anything with a king.
- // ==> Do it at random, although
- // this is clearly inferior to what a human can deduce...
- move.eval = Math.random() < 0.5 ? 1 : -1;
+ move.eval = hisPieceVal - myPieceVal;
+ //Math.random() < 0.5 ? 1 : -1;
}
}
}