X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FMonster.js;h=cb29adae2097bc5fd29a939ce900d4d956e55285;hb=7e8a7ea1cb66adb4a987badfb0a3c2f99a21bd0a;hp=399bc1122ff5d2f7d54bb88acf5b037afb1e58ad;hpb=34bfe15106aab64346f549420f066fe72441172f;p=vchess.git diff --git a/client/src/variants/Monster.js b/client/src/variants/Monster.js index 399bc112..cb29adae 100644 --- a/client/src/variants/Monster.js +++ b/client/src/variants/Monster.js @@ -2,6 +2,7 @@ import { ChessRules } from "@/base_rules"; import { randInt } from "@/utils/alea"; export class MonsterRules extends ChessRules { + static IsGoodFlags(flags) { // Only black can castle return !!flags.match(/^[a-z]{2,2}$/); @@ -72,9 +73,17 @@ export class MonsterRules extends ChessRules { V.PlayOnBoard(this.board, move); if (this.turn == 'w') { if (this.subTurn == 1) this.movesCount++; - else this.turn = 'b'; - this.subTurn = 3 - this.subTurn; - } else { + if ( + this.subTurn == 2 || + // King captured + (move.vanish.length == 2 && move.vanish[1].p == V.KING) + ) { + this.turn = 'b'; + this.subTurn = 1; + } + else this.subTurn = 2; + } + else { this.turn = 'w'; this.movesCount++; } @@ -108,9 +117,11 @@ export class MonsterRules extends ChessRules { const piece = move.vanish[0].p; if (piece == V.KING) this.kingPos[c] = [move.appear[0].x, move.appear[0].y]; - if (move.vanish.length == 2 && move.vanish[1].p == V.KING) + if (move.vanish.length == 2 && move.vanish[1].p == V.KING) { // Opponent's king is captured, game over this.kingPos[move.vanish[1].c] = [-1, -1]; + move.captureKing = true; //for undo + } this.updateCastleFlags(move, piece); } @@ -125,7 +136,7 @@ export class MonsterRules extends ChessRules { } else { this.turn = 'w'; - this.subTurn = 2; + this.subTurn = (!move.captureKing ? 2 : 1); } this.postUndo(move); } @@ -204,4 +215,5 @@ export class MonsterRules extends ChessRules { const color = this.turn; return (color == 'w' ? getBestWhiteMove() : getBestBlackMove()); } + };