X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FAllmate2.js;h=386bf697d452f830ff853df387acb071504a43a1;hb=32f6285ee325a14286562a53baefc647201df2af;hp=34a0f8b0098499b4799607120a776f577c0635aa;hpb=9618937e4a56277f35cbd2dd22078c61bb3f47d4;p=vchess.git diff --git a/client/src/variants/Allmate2.js b/client/src/variants/Allmate2.js index 34a0f8b0..386bf697 100644 --- a/client/src/variants/Allmate2.js +++ b/client/src/variants/Allmate2.js @@ -1,6 +1,6 @@ import { ChessRules, PiPo, Move } from "@/base_rules"; -export const VariantRules = class Allmate2Rules extends ChessRules { +export class Allmate2Rules extends ChessRules { static get HasEnpassant() { return false; } @@ -10,8 +10,8 @@ export const VariantRules = class Allmate2Rules extends ChessRules { return []; } - static GenRandInitFen() { - return ChessRules.GenRandInitFen().replace(/ -$/, ""); + static GenRandInitFen(randomness) { + return ChessRules.GenRandInitFen(randomness).slice(0, -2); } getPotentialMovesFrom([x, y]) { @@ -32,13 +32,13 @@ export const VariantRules = class Allmate2Rules extends ChessRules { let attacked = {}; for (let i=0; i without (normal-)capturing: difference with Allmate variant + // --> without (normal-)capturing: difference with Allmate1 variant // Avoid "oppMoves = this.getAllValidMoves();" => infinite recursion outerLoop: for (let i=0; i= 8) continue; // If this code is reached, rooks and king are on initial position // Nothing on the path of the king ? (and no checks) @@ -141,10 +141,10 @@ export const VariantRules = class Allmate2Rules extends ChessRules { // Nothing on the path to the rook? step = castleSide == 0 ? -1 : 1; - for (i = y + step; i != this.INIT_COL_ROOK[c][castleSide]; i += step) { + const rookPos = this.castleFlags[c][castleSide]; + for (i = y + step; i != rookPos; i += step) { if (this.board[x][i] != V.EMPTY) continue castlingCheck; } - const rookPos = this.INIT_COL_ROOK[c][castleSide]; // Nothing on final squares, except maybe king and castling rook? for (i = 0; i < 2; i++) { @@ -226,7 +226,7 @@ export const VariantRules = class Allmate2Rules extends ChessRules { if (em.start.x == attacked[0] && em.start.y == attacked[1]) // King moved: sq = [em.appear[0].x, em.appear[0].y]; - if (!this.isAttacked(sq, [oppCol])) + if (!this.isAttacked(sq, oppCol)) res = true; V.UndoOnBoard(this.board, em); if (res) @@ -242,34 +242,32 @@ export const VariantRules = class Allmate2Rules extends ChessRules { }); } - updateVariables(move) { - super.updateVariables(move); - const color = V.GetOppCol(this.turn); + postPlay(move) { + super.postPlay(move); if (move.vanish.length >= 2 && move.appear.length == 1) { - move.vanish.forEach(v => { - if (v.c == color) - return; + for (let i = 1; i this.INIT_COL_KING[v.c] - this.castleFlags[v.c][1] = false; + this.castleFlags[v.c][1] = 8; } - }); + } } } - unupdateVariables(move) { - super.unupdateVariables(move); - const color = this.turn; + preUndo(move) { + super.preUndo(move); + const oppCol = this.turn; if (move.vanish.length >= 2 && move.appear.length == 1) { // Did opponent king disappeared? - const psq = move.vanish.find(v => v.p == V.KING && v.c != color) + const psq = move.vanish.find(v => v.p == V.KING && v.c == oppCol) if (psq) this.kingPos[psq.c] = [psq.x, psq.y]; } @@ -288,14 +286,14 @@ export const VariantRules = class Allmate2Rules extends ChessRules { } static get SEARCH_DEPTH() { - return 2; + return 1; } getNotation(move) { let notation = super.getNotation(move); // Add a capture mark (not describing what is captured...): if (move.vanish.length > 1 && move.appear.length == 1) { - if (notation.match(/^[a-h]x/)) + if (!!(notation.match(/^[a-h]x/))) // Pawn capture: remove initial "b" in bxc4 for example notation = notation.substr(1); notation = notation.replace("x","") + "X";