X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FCoregal.js;h=2e4940709942f8856002fc0e79ad14b9177b5bdb;hb=6f2f94374f1e73c375edf732d9425e575e81fff7;hp=1a4a4038a031274e6769c528e84136c8a0a25d83;hpb=3f22c2c3939dfd6bd66da26e6d6d9848c6da86d2;p=vchess.git diff --git a/client/src/variants/Coregal.js b/client/src/variants/Coregal.js index 1a4a4038..2e494070 100644 --- a/client/src/variants/Coregal.js +++ b/client/src/variants/Coregal.js @@ -4,7 +4,7 @@ import { randInt, sample } from "@/utils/alea"; export class CoregalRules extends ChessRules { static IsGoodPosition(position) { - if (!super.IsGoodPosition(position)) return false; + if (!ChessRules.IsGoodPosition(position)) return false; const rows = position.split("/"); // Check that at least one queen of each color is there: let queens = {}; @@ -80,11 +80,11 @@ export class CoregalRules extends ChessRules { } // Get random squares for king and queen between b and g files - let randIndex = randInt(6); - let kingPos = randIndex + 1; - randIndex = randInt(5); + let randIndex = randInt(6) + 1; + let kingPos = randIndex; + randIndex = randInt(5) + 1; if (randIndex >= kingPos) randIndex++; - let queenPos = randIndex + 1; + let queenPos = randIndex; // Get random squares for rooks to the left and right of the queen // and king: not all squares of the same colors (for bishops). @@ -268,18 +268,21 @@ export class CoregalRules extends ChessRules { return false; } - updateCastleFlags(move, piece) { + // "twoKings" arg for the similar Twokings variant. + updateCastleFlags(move, piece, twoKings) { const c = V.GetOppCol(this.turn); const firstRank = (c == "w" ? V.size.x - 1 : 0); // Update castling flags if castling pieces moved or were captured const oppCol = V.GetOppCol(c); const oppFirstRank = V.size.x - 1 - firstRank; - if (move.start.x == firstRank && [V.KING, V.QUEEN].includes(piece)) { - if (this.castleFlags[c][1] == move.start.y) - this.castleFlags[c][1] = 8; - else if (this.castleFlags[c][2] == move.start.y) - this.castleFlags[c][2] = 8; - // Else: the flag is already turned off + if (move.start.x == firstRank) { + if (piece == V.KING || (!twoKings && piece == V.QUEEN)) { + if (this.castleFlags[c][1] == move.start.y) + this.castleFlags[c][1] = 8; + else if (this.castleFlags[c][2] == move.start.y) + this.castleFlags[c][2] = 8; + // Else: the flag is already turned off + } } else if ( move.start.x == firstRank && //our rook moves? @@ -298,6 +301,10 @@ export class CoregalRules extends ChessRules { // NOTE: do not set queen value to 1000 or so, because there may be several. + static get SEARCH_DEPTH() { + return 2; + } + getNotation(move) { if (move.appear.length == 2) { // Castle: determine the right notation