From: Benjamin Auder Date: Sat, 27 Jun 2020 06:43:05 +0000 (+0200) Subject: Monochrome: fixing attempt X-Git-Url: https://git.auder.net/images/assets/doc/html/app_dev.php?a=commitdiff_plain;h=f9ecc49933b5f541724b73856ba816722ea26c34;p=vchess.git Monochrome: fixing attempt --- diff --git a/client/src/translations/rules/Monochrome/en.pug b/client/src/translations/rules/Monochrome/en.pug index 81175e1b..7a10d6d0 100644 --- a/client/src/translations/rules/Monochrome/en.pug +++ b/client/src/translations/rules/Monochrome/en.pug @@ -21,9 +21,9 @@ figure.diagram-container figcaption Before and after Rxd7 p. - Kings have no royal status. There are no en-passant captures, and no castle. - "Zen" captures are possible too: if a piece A attacks a piece B - (in the usual way), then B can capture A. + Kings have no royal status, and move like orthodox queens. + Knights become knightriders: they can make any number of knight steps in a + direction. There are no en-passant captures, and no castle. h3 Source diff --git a/client/src/translations/rules/Monochrome/es.pug b/client/src/translations/rules/Monochrome/es.pug index f77fc215..526f7bb5 100644 --- a/client/src/translations/rules/Monochrome/es.pug +++ b/client/src/translations/rules/Monochrome/es.pug @@ -23,9 +23,10 @@ figure.diagram-container figcaption Antes y después de Rxd7 p. - Los reyes no tienen estatus real. No hay capturas en passant ni enroque. - Las capturas "Zen" también son posibles: si una pieza A ataca a un - pieza B (en el sentido habitual), entonces B puede capturar a A. + Los reyes no tienen estatus real y se mueven como damas. + Los caballos se convierten en caballeros: mueven un número + arbitrario de casillas en una dirección dada. + No hay capturas en passant ni enroque. h3 Fuente diff --git a/client/src/translations/rules/Monochrome/fr.pug b/client/src/translations/rules/Monochrome/fr.pug index 7073855e..091d0361 100644 --- a/client/src/translations/rules/Monochrome/fr.pug +++ b/client/src/translations/rules/Monochrome/fr.pug @@ -23,9 +23,10 @@ figure.diagram-container figcaption Avant et après Rxd7 p. - Les rois n'ont pas de statut royal. Il n'y a ni prise en passant ni roque. - Les captures "Zen" sont possible également : si une pièce A attaque une - pièce B (au sens usuel), alors B peut capturer A. + Les rois n'ont pas de statut royal, et se déplacent comme des dames. + Les cavaliers sont changés en chevaliers : ils se déplacent d'un nombre + arbitraire de cases dans une direction donnée. + Il n'y a ni prise en passant ni roque. h3 Source diff --git a/client/src/variants/Monochrome.js b/client/src/variants/Monochrome.js index 954a050f..8c74961b 100644 --- a/client/src/variants/Monochrome.js +++ b/client/src/variants/Monochrome.js @@ -47,79 +47,21 @@ export class MonochromeRules extends ChessRules { return ((x1 <= 3 && x2 >= 4) || (x1 >= 4 && x2 <= 3)); } - // follow steps from x,y until something is met. - // if met piece is opponent and same movement (asA): eat it! - findCaptures_aux([x, y], asA) { - let moves = []; - const steps = - asA != V.PAWN - ? [V.QUEEN, V.KING].includes(asA) - ? V.steps[V.ROOK].concat(V.steps[V.BISHOP]) - : V.steps[asA] - : this.turn == "w" - ? [ - [-1, -1], - [-1, 1] - ] - : [ - [1, -1], - [1, 1] - ]; - const oneStep = [V.KNIGHT, V.PAWN, V.KING].includes(asA); - outerLoop: for (let loop = 0; loop < steps.length; loop++) { - const step = steps[loop]; - let i = x + step[0]; - let j = y + step[1]; - while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) { - if (oneStep) continue outerLoop; - i += step[0]; - j += step[1]; - } - if ( - V.OnBoard(i, j) && - this.getPiece(i, j) == asA && - this.canTake([i, j], [x, y]) - ) { - // eat! - moves.push(this.getBasicMove([x, y], [i, j])); - } - } - return moves; - } - - // Find possible captures from a square: look in every direction! - findCaptures(sq) { - let moves = []; - Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.PAWN)); - Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.ROOK)); - Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.KNIGHT)); - Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.BISHOP)); - Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.QUEEN)); - Array.prototype.push.apply(moves, this.findCaptures_aux(sq, V.KING)); - return moves; - } - // Trim all non-capturing moves static KeepCaptures(moves) { return moves.filter(m => m.vanish.length == 2); } - getPotentialMovesFrom(sq) { - const moves = super.getPotentialMovesFrom(sq); - const zenCaptures = this.findCaptures(sq); - // Remove duplicate captures in a lazy way (TODO: more efficient...) - let hashMoves = {}; - moves.forEach(m => { - if (m.vanish.length == 2) { - const hash = - m.start.x + "." + m.start.y + "." + m.end.x + "." + m.end.y; - hashMoves[hash] = true; - } - }); - return moves.concat(zenCaptures.filter(m => { - const hash = m.start.x + "." + m.start.y + "." + m.end.x + "." + m.end.y; - return !hashMoves[hash]; - })); + getPotentialKnightMoves(sq) { + // Knight becomes knightrider: + return this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT]); + } + + getPotentialKingMoves(sq) { + // King become queen: + return ( + this.getSlideNJumpMoves(sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP])); + ) } getAllPotentialMoves() {