From ecb8f91b8b8ea909baabc8077baf1ca92b4b6664 Mon Sep 17 00:00:00 2001 From: Benjamin Auder Date: Sat, 9 Jan 2021 22:36:47 +0100 Subject: [PATCH] Fix Dobutsu, start draft of Relayup --- client/src/variants/Dobutsu.js | 8 ++++ client/src/variants/Progressive2.js | 4 ++ client/src/variants/Relayup.js | 59 +++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 client/src/variants/Relayup.js diff --git a/client/src/variants/Dobutsu.js b/client/src/variants/Dobutsu.js index a5c03868..4d151c3d 100644 --- a/client/src/variants/Dobutsu.js +++ b/client/src/variants/Dobutsu.js @@ -177,6 +177,7 @@ export class DobutsuRules extends ChessRules { } switch (this.getPiece(sq[0], sq[1])) { case V.PAWN: return this.getPotentialPawnMoves(sq); + case V.HEN: return this.getPotentialHenMoves(sq); case V.ELEPHANT: return this.getPotentialElephantMoves(sq); case V.GIRAFFE: return this.getPotentialGiraffeMoves(sq); case V.KING: return super.getPotentialKingMoves(sq); @@ -198,6 +199,13 @@ export class DobutsuRules extends ChessRules { } } + getPotentialHenMoves([x, y]) { + const c = this.turn; + const forward = (c == 'w' ? -1 : 1); + const steps = V.steps[V.ROOK].concat([[forward, 1], [forward, -1]]); + return super.getSlideNJumpMoves(sq, steps, "oneStep"); + } + getPotentialElephantMoves(sq) { return super.getSlideNJumpMoves(sq, V.steps[V.BISHOP], "oneStep"); } diff --git a/client/src/variants/Progressive2.js b/client/src/variants/Progressive2.js index d0c15e61..8df8eeae 100644 --- a/client/src/variants/Progressive2.js +++ b/client/src/variants/Progressive2.js @@ -17,6 +17,10 @@ export class Progressive2Rules extends Progressive1Rules { return false; } + static get HasEnpassant() { + return false; + } + postPlay(move) { const c = move.turn[0]; const piece = move.vanish[0].p; diff --git a/client/src/variants/Relayup.js b/client/src/variants/Relayup.js new file mode 100644 index 00000000..4b85fde1 --- /dev/null +++ b/client/src/variants/Relayup.js @@ -0,0 +1,59 @@ +import { ChessRules } from "@/base_rules"; + +// Pawns relayed by one square at a time (but with relaying pioece movements) +// diff from https://www.chessvariants.com/rules/relay-chess ==> new name +export class RelayupRules extends ChessRules { + + static get PawnSpecs() { + return Object.assign( + {}, + ChessRules.PawnSpecs, + { twoSquares: false } + ); + } + + static get HasFlags() { + return false; + } + + static get HasEnpassant() { + return false; + } + + getPotentialMovesFrom([x, y]) { + let moves = super.getPotentialMovesFrom([x, y]); + + // Expand possible moves if guarded by friendly pieces: + // --> Pawns cannot be promoted through a relaying move (thus 8th rank forbidden) + // TODO + + return moves; + } + + getNotation(move) { + // Translate final and initial square + const initSquare = V.CoordsToSquare(move.start); + const finalSquare = V.CoordsToSquare(move.end); + const piece = this.getPiece(move.start.x, move.start.y); + + // Since pieces and pawns could move like knight, + // indicate start and end squares + let notation = + piece.toUpperCase() + + initSquare + + (move.vanish.length > move.appear.length ? "x" : "") + + finalSquare + + if ( + piece == V.PAWN && + move.appear.length > 0 && + move.appear[0].p != V.PAWN + ) { + // Promotion + notation += "=" + move.appear[0].p.toUpperCase(); + } + + return notation; + } + +}; -- 2.44.0