export class FanoronaRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get HasFlags() {
return false;
}
return "Fanorona/" + b;
}
- getPPpath(m) {
+ getPPpath(m, orientation) {
// m.vanish.length >= 2, first capture gives direction
const ref = (Math.abs(m.vanish[1].x - m.start.x) == 1 ? m.start : m.end);
const step = [m.vanish[1].x - ref.x, m.vanish[1].y - ref.y];
+ const multStep = (orientation == 'w' ? 1 : -1);
const normalizedStep = [
- step[0] / Math.abs(step[0]),
- step[1] / Math.abs(step[1])
+ multStep * step[0] / Math.abs(step[0]),
+ multStep * step[1] / Math.abs(step[1])
];
return (
"Fanorona/arrow_" +
const color = this.turn;
move.turn = color; //for undo
V.PlayOnBoard(this.board, move);
- const L0 = this.captures.length;
- let captures = this.captures[L0 - 1];
if (move.vanish.length >= 2) {
+ const L0 = this.captures.length;
+ let captures = this.captures[L0 - 1];
captures.push({
square: move.start,
step: [move.end.x - move.start.x, move.end.y - move.start.y]
});
if (this.atLeastOneCapture())
// There could be other captures (optional)
- // This field is mostly useful for computer play.
move.notTheEnd = true;
- else captures.pop(); //useless now
}
if (!move.notTheEnd) {
this.turn = V.GetOppCol(color);
undo(move) {
V.UndoOnBoard(this.board, move);
- if (move.turn != this.turn) {
+ if (!move.notTheEnd) {
this.turn = move.turn;
this.movesCount--;
this.captures.pop();
}
- else {
+ if (move.vanish.length >= 2) {
const L0 = this.captures.length;
let captures = this.captures[L0 - 1];
captures.pop();