return true;
}
- static GenRandInitFen()
+ static IsGoodEnpassant(enpassant)
{
- const fen = ChessRules.GenRandInitFen();
- return fen.replace(" w 1111", " w 1111 0000000000");
+ if (enpassant != "-")
+ {
+ const squares = enpassant.split(",");
+ if (squares.length > 2)
+ return false;
+ for (let sq of squares)
+ {
+ const ep = V.SquareToCoords(sq);
+ if (isNaN(ep.x) || !V.OnBoard(ep))
+ return false;
+ }
+ }
+ return true;
+ }
+
+ static ParseFen(fen)
+ {
+ const fenParts = fen.split(" ");
+ return Object.assign(
+ ChessRules.ParseFen(fen),
+ { captured: fenParts[4] }
+ );
}
getFen()
getCapturedFen()
{
let counts = _.map(_.range(10), 0);
- for (let i=0; i<V.PIECES.length; i++)
+ for (let i=0; i<V.PIECES.length-1; i++) //-1: no king captured
{
counts[i] = this.captured["w"][V.PIECES[i]];
counts[5+i] = this.captured["b"][V.PIECES[i]];
// TODO: some redundant checks
if (epsq.x == x+shift && Math.abs(epsq.y - y) == 1)
{
- let epStep = epsq.y - y;
- var enpassantMove = this.getBasicMove([x,y], [x+shift,y+epStep]);
+ var enpassantMove = this.getBasicMove([x,y], [x+shift,epsq.y]);
enpassantMove.vanish.push({
x: x,
- y: y+epStep,
+ y: epsq.y,
p: 'p',
- c: this.getColor(x,y+epStep)
+ c: this.getColor(x,epsq.y)
});
moves.push(enpassantMove);
}
return pieces["b"].join("") +
"/pppppppppp/10/10/10/10/10/10/PPPPPPPPPP/" +
pieces["w"].join("").toUpperCase() +
- " w 1111 -";
+ " w 1111 - 0000000000";
}
}