X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FShogi.js;h=bca37627025f6dde7caa9a835da4863813b9d4c2;hb=809ab1a837e0f748987bcf7d66defa11cb7a1792;hp=9104ed92d70ea59b64b95ac72bbfbcd3f06170ce;hpb=ded43c88fad60fd8f9bb46aabd67f3f2092f65f3;p=vchess.git diff --git a/client/src/variants/Shogi.js b/client/src/variants/Shogi.js index 9104ed92..bca37627 100644 --- a/client/src/variants/Shogi.js +++ b/client/src/variants/Shogi.js @@ -24,6 +24,11 @@ export class ShogiRules extends ChessRules { return true; } + loseOnRepetition() { + // If current side is under check: lost + return this.underCheck(this.turn); + } + static IsGoodFen(fen) { if (!ChessRules.IsGoodFen(fen)) return false; const fenParsed = V.ParseFen(fen); @@ -282,7 +287,9 @@ export class ShogiRules extends ChessRules { if (p == V.PAWN) { // Do not drop on checkmate: this.play(mv); - const res = (this.underCheck(oppCol) && !this.atLeastOneMove()); + const res = ( + this.underCheck(oppCol) && !this.atLeastOneMove("noReserve") + ); this.undo(mv); if (res) continue; } @@ -548,14 +555,16 @@ export class ShogiRules extends ChessRules { return this.filterValid(moves); } - atLeastOneMove() { + atLeastOneMove(noReserve) { if (!super.atLeastOneMove()) { - // Search one reserve move - for (let i = 0; i < V.RESERVE_PIECES.length; i++) { - let moves = this.filterValid( - this.getReserveMoves([V.size.x + (this.turn == "w" ? 0 : 1), i]) - ); - if (moves.length > 0) return true; + if (!noReserve) { + // Search one reserve move + for (let i = 0; i < V.RESERVE_PIECES.length; i++) { + let moves = this.filterValid( + this.getReserveMoves([V.size.x + (this.turn == "w" ? 0 : 1), i]) + ); + if (moves.length > 0) return true; + } } return false; }