X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FExtinction.js;h=db8abc0622f3008c961d06fc9492f6a64fec5625;hb=e50a802531b99829c533f22ecd21e359e7e1e049;hp=3fa5327608e50fe2e36c5305e699ada37526924b;hpb=3a2a7b5fd3c6bfd0752838094c27e1fb6172d109;p=vchess.git diff --git a/client/src/variants/Extinction.js b/client/src/variants/Extinction.js index 3fa53276..db8abc06 100644 --- a/client/src/variants/Extinction.js +++ b/client/src/variants/Extinction.js @@ -1,27 +1,33 @@ import { ChessRules } from "@/base_rules"; -export const VariantRules = class ExtinctionRules extends ChessRules { +export class ExtinctionRules extends ChessRules { + static get PawnSpecs() { + return Object.assign( + {}, + ChessRules.PawnSpecs, + { promotions: ChessRules.PawnSpecs.promotions.concat([V.KING]) } + ); + } + static IsGoodPosition(position) { - if (!ChessRules.IsGoodPosition(position)) - return false; + if (!ChessRules.IsGoodPosition(position)) return false; // Also check that each piece type is present const rows = position.split("/"); let pieces = {}; for (let row of rows) { for (let i = 0; i < row.length; i++) { - if (isNaN(parseInt(row[i])) && !pieces[row[i]]) + if (isNaN(parseInt(row[i], 10)) && !pieces[row[i]]) pieces[row[i]] = true; } } - if (Object.keys(pieces).length != 12) - return false; + if (Object.keys(pieces).length != 12) return false; return true; } setOtherVariables(fen) { super.setOtherVariables(fen); const pos = V.ParseFen(fen).position; - // NOTE: no need for safety "|| []", because each piece type must be present + // NOTE: no need for safety "|| []", because each piece type is present // (otherwise game is already over!) this.material = { w: { @@ -43,43 +49,6 @@ export const VariantRules = class ExtinctionRules extends ChessRules { }; } - getPotentialPawnMoves([x, y]) { - let moves = super.getPotentialPawnMoves([x, y]); - // Add potential promotions into king - const color = this.turn; - const shift = color == "w" ? -1 : 1; - const lastRank = color == "w" ? 0 : V.size.x - 1; - - if (x + shift == lastRank) { - // Normal move - if (this.board[x + shift][y] == V.EMPTY) - moves.push( - this.getBasicMove([x, y], [x + shift, y], { c: color, p: V.KING }) - ); - // Captures - if ( - y > 0 && - this.board[x + shift][y - 1] != V.EMPTY && - this.canTake([x, y], [x + shift, y - 1]) - ) { - moves.push( - this.getBasicMove([x, y], [x + shift, y - 1], { c: color, p: V.KING }) - ); - } - if ( - y < V.size.y - 1 && - this.board[x + shift][y + 1] != V.EMPTY && - this.canTake([x, y], [x + shift, y + 1]) - ) { - moves.push( - this.getBasicMove([x, y], [x + shift, y + 1], { c: color, p: V.KING }) - ); - } - } - - return moves; - } - // TODO: verify this assertion atLeastOneMove() { return true; //always at least one possible move @@ -128,7 +97,6 @@ export const VariantRules = class ExtinctionRules extends ChessRules { } return "*"; } - return this.turn == "w" ? "0-1" : "1-0"; //NOTE: currently unreachable... } @@ -139,7 +107,8 @@ export const VariantRules = class ExtinctionRules extends ChessRules { return this.material[color][p] == 0; }) ) { - // Very negative (resp. positive) if white (reps. black) pieces set is incomplete + // Very negative (resp. positive) + // if white (reps. black) pieces set is incomplete return (color == "w" ? -1 : 1) * V.INFINITY; } return super.evalPosition();