X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FPandemonium.js;h=4ae73033ed0dc950f09bc821f371e44edd7d1ea3;hb=809ab1a837e0f748987bcf7d66defa11cb7a1792;hp=287aa3bfeceb0b2c48cf7936935831be7fe3d268;hpb=acf207122fb8aa86ea9fb8ae1b34d9d301995414;p=vchess.git diff --git a/client/src/variants/Pandemonium.js b/client/src/variants/Pandemonium.js index 287aa3bf..4ae73033 100644 --- a/client/src/variants/Pandemonium.js +++ b/client/src/variants/Pandemonium.js @@ -14,6 +14,11 @@ export class PandemoniumRules extends ChessRules { ); } + loseOnRepetition() { + // If current side is under check: lost + return this.underCheck(this.turn); + } + static get GILDING() { return "g"; } @@ -147,20 +152,11 @@ export class PandemoniumRules extends ChessRules { return counts.join(""); } - setFlags(fenflags) { - // white a-castle, h-castle, king pos, then same for black. - this.castleFlags = { w: [-1, -1, -1], b: [-1, -1, -1] }; - for (let i = 0; i < 6; i++) { - this.castleFlags[i < 3 ? "w" : "b"][i % 3] = - V.ColumnToCoord(fenflags.charAt(i)); - } - } - static GenRandInitFen(randomness) { // No randomization here for now (but initial setup choice) return ( "rnbqkmcbnr/pppppppppp/91/91/91/91/91/91/PPPPPPPPPP/RNBQKMCBNR " + - "w 0 ajeaje - 00000000000000" + "w 0 ajaj - 00000000000000" ); // TODO later: randomization too --> 2 bishops, not next to each other. // then knights next to bishops. Then other pieces (...). @@ -223,6 +219,7 @@ export class PandemoniumRules extends ChessRules { getReserveMoves([x, y]) { const color = this.turn; + const oppCol = V.GetOppCol(color); const p = V.RESERVE_PIECES[y]; if (this.reserve[color][p] == 0) return []; const bounds = (p == V.PAWN ? [1, V.size.x - 1] : [0, V.size.x]); @@ -477,25 +474,14 @@ export class PandemoniumRules extends ChessRules { if ( this.castleFlags[c][0] < V.size.y || this.castleFlags[c][1] < V.size.y - ) { - moves = moves.concat(this.getCastleMoves(sq)); - } - return moves; - } - - getCastleMoves([x, y]) { - const c = this.getColor(x, y); - if ( - ((c == 'w' && x == 9) || (c == 'b' && x == 0)) && - y == this.castleFlags[c][2] ) { const finalSquares = [ [1, 2], [7, 6] ]; - return super.getCastleMoves([x, y], finalSquares, false, [V.ROOK]); + moves = moves.concat(super.getCastleMoves(sq, finalSquares)); } - return []; + return moves; } isAttacked(sq, color) { @@ -541,7 +527,7 @@ export class PandemoniumRules extends ChessRules { const steps = V.steps[V.KNIGHT].concat(V.steps[V.ROOK]).concat(V.steps[V.BISHOP]); return ( - super.isAttackedBySlideNJump(sq, color, steps, V.SCEPTER, "oneStep") + super.isAttackedBySlideNJump(sq, color, V.SCEPTER, steps, "oneStep") ); } @@ -549,7 +535,7 @@ export class PandemoniumRules extends ChessRules { return ( super.isAttackedBySlideNJump(sq, color, V.steps[V.BISHOP], V.HORSE) || super.isAttackedBySlideNJump( - sq, color, V.steps[V.ROOK], V.HORSE, "oneStep") + sq, color, V.HORSE, V.steps[V.ROOK], "oneStep") ); } @@ -557,7 +543,7 @@ export class PandemoniumRules extends ChessRules { return ( super.isAttackedBySlideNJump(sq, color, V.steps[V.ROOK], V.DRAGON) || super.isAttackedBySlideNJump( - sq, color, V.steps[V.BISHOP], V.DRAGON, "oneStep") + sq, color, V.DRAGON, V.steps[V.BISHOP], "oneStep") ); } @@ -647,14 +633,6 @@ export class PandemoniumRules extends ChessRules { this.postPlay(move); } - updateCastleFlags(move, piece) { - if (piece == V.KING && move.appear.length == 2) { - // Castling (only move which disable flags) - this.castleFlags[move.appear[0].c][0] = 10; - this.castleFlags[move.appear[0].c][1] = 10; - } - } - postPlay(move) { if (move.vanish.length == 0 && move.appear.length == 0) return; super.postPlay(move); @@ -689,37 +667,6 @@ export class PandemoniumRules extends ChessRules { this.reserve[color][V.MayDecode(move.vanish[1].p)]--; } - getCurrentScore() { - const c = this.turn, - oppCol = V.GetOppCol(this.turn); - let facingKings = false; - if ( - this.kingPos[c][0] == this.kingPos[oppCol][0] || - this.kingPos[c][1] == this.kingPos[oppCol][1] - ) { - facingKings = true; - let step = [ - this.kingPos[oppCol][0] - this.kingPos[c][0], - this.kingPos[oppCol][1] - this.kingPos[c][1] - ]; - if (step[0] != 0) step[0] /= Math.abs(step[0]); - else step[1] /= Math.abs(step[1]); - let [x, y] = - [ this.kingPos[c][0] + step[0], this.kingPos[c][1] + step[1] ]; - while (x != this.kingPos[oppCol][0] || y != this.kingPos[oppCol][1]) { - if (this.board[x][y] != V.EMPTY) { - facingKings = false; - break; - } - x += step[0]; - y += step[1]; - } - } - if (facingKings) return (c == "w" ? "1-0" : "0-1"); - if (!this.atLeastOneMove()) return (c == "w" ? "0-1" : "1-0"); - return "*"; - } - static get VALUES() { return Object.assign( {},