import { ChessRules, Move, PiPo } from "@/base_rules";
export class CannibalRules extends ChessRules {
+
static get KING_CODE() {
return {
'p': 's',
else if (kingWhiteCodes.includes(row[i])) kings['w']++;
if (allPiecesCodes.includes(row[i].toLowerCase())) sumElts++;
else {
- const num = parseInt(row[i]);
+ const num = parseInt(row[i], 10);
if (isNaN(num)) return false;
sumElts += num;
}
const color = (piece.charCodeAt(0) <= 90 ? 'w' : 'b');
this.kingPos[color] = [i, k];
} else {
- const num = parseInt(rows[i].charAt(j));
+ const num = parseInt(rows[i].charAt(j), 10);
if (!isNaN(num)) k += num - 1;
}
k++;
return moves.filter(m => m.vanish.length == 2 && m.appear.length == 1);
}
- // Stop at the first capture found (if any)
+ // Stop at the first capture found (if any)
atLeastOneCapture() {
const color = this.turn;
const oppCol = V.GetOppCol(color);
// Because of the disguised kings, getPiece() could be wrong:
// use board[x][y][1] instead (always valid).
getBasicMove([sx, sy], [ex, ey], tr) {
- const initColor = this.getColor(sx, sy);
- const initPiece = this.board[sx][sy].charAt(1);
- let mv = new Move({
- appear: [
- new PiPo({
- x: ex,
- y: ey,
- c: tr ? tr.c : initColor,
- p: tr ? tr.p : initPiece
- })
- ],
- vanish: [
- new PiPo({
- x: sx,
- y: sy,
- c: initColor,
- p: initPiece
- })
- ]
- });
-
- // The opponent piece disappears if we take it
- if (this.board[ex][ey] != V.EMPTY) {
- mv.vanish.push(
- new PiPo({
- x: ex,
- y: ey,
- c: this.getColor(ex, ey),
- p: this.board[ex][ey].charAt(1)
- })
- );
+ let mv = super.getBasicMove([sx, sy], [ex, ey], tr);
+ if (this.board[ex][ey] != V.EMPTY) {
// If the captured piece has a different nature: take it as well
if (mv.vanish[0].p != mv.vanish[1].p) {
if (
Object.keys(V.KING_DECODE).includes(mv.vanish[0].p)
) {
mv.appear[0].p = V.KING_CODE[mv.vanish[1].p];
- } else mv.appear[0].p = mv.vanish[1].p;
+ }
+ else mv.appear[0].p = mv.vanish[1].p;
}
}
else if (!!tr && mv.vanish[0].p != V.PAWN)
}
return notation;
}
+
};