X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fbase_rules.js;h=656f7019c5c8f0beac84467b795535e2e2cb7a78;hb=9bd6786b863c31c3ccd0057b87cf454c90886056;hp=42d9bdc8067ab56bd596af84bf73e65496c764b9;hpb=910d631b73cad5ffef1b4461157b704e7e7057d8;p=vchess.git diff --git a/client/src/base_rules.js b/client/src/base_rules.js index 42d9bdc8..656f7019 100644 --- a/client/src/base_rules.js +++ b/client/src/base_rules.js @@ -32,13 +32,26 @@ export const ChessRules = class ChessRules { ////////////// // MISC UTILS + // Some variants don't have flags: static get HasFlags() { return true; - } //some variants don't have flags + } + // Some variants don't have en-passant static get HasEnpassant() { return true; - } //some variants don't have ep. + } + + // Some variants cannot have analyse mode + static get CanAnalyze() { + return true; + } + + // Some variants show incomplete information, + // and thus show only a partial moves list or no list at all. + static get ShowMoves() { + return "all"; + } // Path to pieces static getPpath(b) { @@ -83,9 +96,12 @@ export const ChessRules = class ChessRules { if (position.length == 0) return false; const rows = position.split("/"); if (rows.length != V.size.x) return false; + let kings = {}; for (let row of rows) { let sumElts = 0; for (let i = 0; i < row.length; i++) { + if (['K','k'].includes(row[i])) + kings[row[i]] = true; if (V.PIECES.includes(row[i].toLowerCase())) sumElts++; else { const num = parseInt(row[i]); @@ -95,6 +111,9 @@ export const ChessRules = class ChessRules { } if (sumElts != V.size.y) return false; } + // Both kings should be on board: + if (Object.keys(kings).length != 2) + return false; return true; } @@ -416,7 +435,7 @@ export const ChessRules = class ChessRules { if (V.HasEnpassant) { const epSq = parsedFen.enpassant != "-" - ? V.SquareToCoords(parsedFen.enpassant) + ? this.getEpSquare(parsedFen.enpassant) : undefined; this.epSquares = [epSq]; } @@ -703,10 +722,11 @@ export const ChessRules = class ChessRules { const oppCol = V.GetOppCol(c); let moves = []; let i = 0; + // King, then rook: const finalSquares = [ [2, 3], [V.size.y - 2, V.size.y - 3] - ]; //king, then rook + ]; castlingCheck: for ( let castleSide = 0; castleSide < 2; @@ -1003,9 +1023,9 @@ export const ChessRules = class ChessRules { play(move) { // DEBUG: - // if (!this.states) this.states = []; - // const stateFen = this.getBaseFen() + this.getTurnFen() + this.getFlagsFen(); - // this.states.push(stateFen); +// if (!this.states) this.states = []; +// const stateFen = this.getBaseFen() + this.getTurnFen() + this.getFlagsFen(); +// this.states.push(stateFen); if (V.HasFlags) move.flags = JSON.stringify(this.aggregateFlags()); //save flags (for undo) if (V.HasEnpassant) this.epSquares.push(this.getEpSquare(move)); @@ -1024,9 +1044,9 @@ export const ChessRules = class ChessRules { this.unupdateVariables(move); // DEBUG: - // const stateFen = this.getBaseFen() + this.getTurnFen() + this.getFlagsFen(); - // if (stateFen != this.states[this.states.length-1]) debugger; - // this.states.pop(); +// const stateFen = this.getBaseFen() + this.getTurnFen() + this.getFlagsFen(); +// if (stateFen != this.states[this.states.length-1]) debugger; +// this.states.pop(); } ///////////////