X-Git-Url: https://git.auder.net/?p=vchess.git;a=blobdiff_plain;f=public%2Fjavascripts%2Fvariants%2FCheckered.js;h=585d20ff99ea63ab4c4d81aac0869eac0f84e50a;hp=2d62d4b8af2bdaf53f64aa6414ea390a42fa3fe1;hb=7931e479adf93c87771ded1892a0873af72ae46d;hpb=da06a6eb0237123ce43fdb01cb06246b8b57f5e5 diff --git a/public/javascripts/variants/Checkered.js b/public/javascripts/variants/Checkered.js index 2d62d4b8..585d20ff 100644 --- a/public/javascripts/variants/Checkered.js +++ b/public/javascripts/variants/Checkered.js @@ -19,18 +19,34 @@ class CheckeredRules extends ChessRules } static fen2board(f) { + // Tolerate upper-case versions of checkered pieces (why not?) const checkered_pieces = { 's': 'p', + 'S': 'p', 't': 'q', + 'T': 'q', 'u': 'r', + 'U': 'r', 'c': 'b', + 'C': 'b', 'o': 'n', + 'O': 'n', }; if (Object.keys(checkered_pieces).includes(f)) return 'c'+checkered_pieces[f]; return ChessRules.fen2board(f); } + static get PIECES() { + return ChessRules.PIECES.concat(['s','t','u','c','o']); + } + + static IsGoodFlags(flags) + { + // 4 for castle + 16 for pawns + return !!flags.match(/^[01]{20,20}$/); + } + setFlags(fen) { super.setFlags(fen); //castleFlags @@ -108,9 +124,7 @@ class CheckeredRules extends ChessRules canIplay(side, [x,y]) { - return ((side=='w' && this.moves.length%2==0) - || (side=='b' && this.moves.length%2==1)) - && [side,'c'].includes(this.getColor(x,y)); + return (side == this.turn && [side,'c'].includes(this.getColor(x,y))); } // Does m2 un-do m1 ? (to disallow undoing checkered moves) @@ -194,11 +208,12 @@ class CheckeredRules extends ChessRules checkGameEnd() { const color = this.turn; - this.moves.length++; //artifically change turn, for checkered pawns (TODO) + // Artifically change turn, for checkered pawns + this.turn = this.getOppCol(this.turn); const res = this.isAttacked(this.kingPos[color], [this.getOppCol(color),'c']) ? (color == "w" ? "0-1" : "1-0") : "1/2"; - this.moves.length--; + this.turn = this.getOppCol(this.turn); return res; }