X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FMagnetic.js;h=9fc4180de84297e4b63f954cfd6d16af461118d7;hb=2c5d7b20742b802d9c47916915c1114bcfc9a9c3;hp=0110c49ef88b14c830a99390ad3eebb91badae46;hpb=6808d7a16ec1e761c6a2dffec2281c96953e4d89;p=vchess.git diff --git a/client/src/variants/Magnetic.js b/client/src/variants/Magnetic.js index 0110c49e..9fc4180d 100644 --- a/client/src/variants/Magnetic.js +++ b/client/src/variants/Magnetic.js @@ -1,6 +1,6 @@ import { ChessRules, PiPo } from "@/base_rules"; -export const VariantRules = class MagneticRules extends ChessRules { +export class MagneticRules extends ChessRules { static get HasEnpassant() { return false; } @@ -20,8 +20,10 @@ export const VariantRules = class MagneticRules extends ChessRules { // Complete a move with magnetic actions // TODO: job is done multiple times for (normal) promotions. applyMagneticLaws(move) { - if (move.appear[0].p == V.KING && move.appear.length == 1) return [move]; //kings are not charged - const aIdx = move.appear[0].p != V.KING ? 0 : 1; //if castling, rook is charged + // Exception: kings are not charged + if (move.appear[0].p == V.KING && move.appear.length == 1) return [move]; + // If castling, rook is charged: + const aIdx = move.appear[0].p != V.KING ? 0 : 1; const [x, y] = [move.appear[aIdx].x, move.appear[aIdx].y]; const color = this.turn; const lastRank = color == "w" ? 0 : 7; @@ -114,7 +116,8 @@ export const VariantRules = class MagneticRules extends ChessRules { cmove.appear[i].p = piece; moves.push(cmove); } - // Swap appear[i] and appear[0] for moves presentation (TODO: this is awkward) + // Swap appear[i] and appear[0] for moves presentation + // (TODO: this is awkward) moves.forEach(m => { let tmp = m.appear[0]; m.appear[0] = m.appear[i]; @@ -134,42 +137,47 @@ export const VariantRules = class MagneticRules extends ChessRules { return true; //TODO: is it right? } - underCheck() { - return false; //there is no check + filterValid(moves) { + // There are no checks + return moves; } getCheckSquares() { return []; } - updateVariables(move) { - super.updateVariables(move); + postPlay(move) { + super.postPlay(move); const c = move.vanish[0].c; if (move.vanish.length >= 2 && move.vanish[1].p == V.KING) { // We took opponent king ! const oppCol = V.GetOppCol(c); this.kingPos[oppCol] = [-1, -1]; - this.castleFlags[oppCol] = [false, false]; + this.castleFlags[oppCol] = [8, 8]; } // Did we magnetically move our (init) rooks or opponents' ones ? const firstRank = c == "w" ? 7 : 0; const oppFirstRank = 7 - firstRank; const oppCol = V.GetOppCol(c); move.vanish.forEach(psq => { - if (psq.x == firstRank && this.INIT_COL_ROOK[c].includes(psq.y)) - this.castleFlags[c][psq.y == this.INIT_COL_ROOK[c][0] ? 0 : 1] = false; + if ( + psq.x == firstRank && + this.castleFlags[c].includes(psq.y) + ) { + this.castleFlags[c][psq.y == this.castleFlags[c][0] ? 0 : 1] = 8; + } else if ( psq.x == oppFirstRank && - this.INIT_COL_ROOK[oppCol].includes(psq.y) - ) - this.castleFlags[oppCol][ - psq.y == this.INIT_COL_ROOK[oppCol][0] ? 0 : 1 - ] = false; + this.castleFlags[oppCol].includes(psq.y) + ) { + const flagIdx = (psq.y == this.castleFlags[oppCol][0] ? 0 : 1); + this.castleFlags[oppCol][flagIdx] = 8; + } }); } - unupdateVariables(move) { - super.unupdateVariables(move); + postUndo(move) { + super.postUndo(move); const c = move.vanish[0].c; const oppCol = V.GetOppCol(c); if (this.kingPos[oppCol][0] < 0) { @@ -187,10 +195,10 @@ export const VariantRules = class MagneticRules extends ChessRules { const color = this.turn; const kp = this.kingPos[color]; if (kp[0] < 0) - //king disappeared + // King disappeared return color == "w" ? "0-1" : "1-0"; if (this.atLeastOneMove()) - // game not over + // Game not over return "*"; return "1/2"; //no moves but kings still there } @@ -198,4 +206,8 @@ export const VariantRules = class MagneticRules extends ChessRules { static get THRESHOLD_MATE() { return 500; //checkmates evals may be slightly below 1000 } + + static get SEARCH_DEPTH() { + return 2; + } };