| Makruk, with kings immobilized by checks.
p
- | Everything goes as in the variant
+ | Everything goes as in
a(href="/#/variants/Makruk") Makruk
- | , but the king isn't allowed to move when he's under check:
- | one has to capture the attacker, or intercept the attack if possible.
+ | , but the king isn't allowed to move when he's under check
+ | except to capture the attacker.
figure.diagram-container
.diagram
| Makruk, con reyes inmovilizados por los jaques.
p
- | Todo va como en la variante
+ | Todo va como en
a(href="/#/variants/Makruk") Makruk
- | , pero el rey no puede moverse cuando está en jaque:
- | debemos capturar al agresor, o interponer una pieza si es posible.
+ | , pero el rey no puede moverse cuando está en jaque
+ | excepto por capturar al agresor.
figure.diagram-container
.diagram
| Makruk, avec rois immobilisés par les échecs.
p
- | Tout se déroule comme dans la variante
+ | Tout se déroule comme au
a(href="/#/variants/Makruk") Makruk
- | , mais le roi n'a pas le droit de bouger lorsqu'il est en échec :
- | il faut capturer l'assaillant, ou interposer une pièce si possible.
+ | , mais le roi n'a pas le droit de bouger lorsqu'il est en échec
+ | sauf pour capturer l'attaquant.
figure.diagram-container
.diagram
filterValid(moves) {
const color = this.turn;
- if (this.underCheck(color)) {
- // Filter out all moves involving king
- return super.filterValid(moves.filter(m => m.vanish[0].p != V.KING));
- }
- return super.filterValid(moves);
+ if (!this.underCheck(color)) return super.filterValid(moves);
+ // Filter out all moves involving king, except for capturing a
+ // potential attacker.
+ const pawnAttack = (color == 'w' ? -1 : 1);
+ return super.filterValid(moves.filter(m => {
+ const p = (m.vanish.length == 2 ? m.vanish[1].p : null);
+ return (
+ m.vanish[0].p != V.KING ||
+ (
+ m.vanish.length == 2 &&
+ (
+ (
+ p == V.PAWN &&
+ m.end.x - m.start.x == pawnAttack &&
+ Math.abs(m.end.y - m.start.y) == 1
+ )
+ ||
+ (
+ p == V.ROOK &&
+ (m.end.x == m.start.x || m.end.y == m.start.y)
+ )
+ ||
+ (
+ [V.PROMOTED, V.QUEEN].includes(p) &&
+ m.end.x != m.start.x && m.end.y != m.start.y
+ )
+ ||
+ (
+ p == V.BISHOP &&
+ (
+ m.end.x - m.start.x == pawnAttack ||
+ (
+ m.end.x - m.start.x == -pawnAttack &&
+ Math.abs(m.end.y - m.start.y) == 1
+ )
+ )
+ )
+ )
+ )
+ );
+ }));
}
};
);
}
+ isAttacked(sq, color) {
+ return (
+ super.isAttacked(sq, color) || this.isAttackedByPromoted(sq, color)
+ );
+ }
+
isAttackedByBishop(sq, color) {
const forward = (color == 'w' ? 1 : -1);
return this.isAttackedBySlideNJump(
);
}
+ isAttackedByPromoted(sq, color) {
+ return super.isAttackedBySlideNJump(
+ sq,
+ color,
+ V.PROMOTED,
+ V.steps[V.BISHOP],
+ "oneStep"
+ );
+ }
+
static get VALUES() {
return {
p: 1,