X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FParachute.js;h=8cd0f9c24f0fbf4ba9e8cb7e89e461e862ce385f;hb=e50a802531b99829c533f22ecd21e359e7e1e049;hp=07186352aba90ca8ed490196b6401f08113e6445;hpb=0d5335de5c94d780e03ac0aa3279b731c69455cc;p=vchess.git diff --git a/client/src/variants/Parachute.js b/client/src/variants/Parachute.js index 07186352..8cd0f9c2 100644 --- a/client/src/variants/Parachute.js +++ b/client/src/variants/Parachute.js @@ -14,6 +14,25 @@ export class ParachuteRules extends ChessRules { return true; } + static IsGoodPosition(position) { + if (position.length == 0) return false; + const rows = position.split("/"); + if (rows.length != V.size.x) return false; + for (let row of rows) { + let sumElts = 0; + for (let i = 0; i < row.length; i++) { + if (V.PIECES.includes(row[i].toLowerCase())) sumElts++; + else { + const num = parseInt(row[i], 10); + if (isNaN(num)) return false; + sumElts += num; + } + } + if (sumElts != V.size.y) return false; + } + return true; + } + static ParseFen(fen) { const fenParts = fen.split(" "); return Object.assign( @@ -46,24 +65,25 @@ export class ParachuteRules extends ChessRules { setOtherVariables(fen) { super.setOtherVariables(fen); - const fenParsed = V.ParseFen(fen); // Also init reserves (used by the interface to show landable pieces) + const reserve = + V.ParseFen(fen).reserve.split("").map(x => parseInt(x, 10)); this.reserve = { w: { - [V.PAWN]: parseInt(fenParsed.reserve[0]), - [V.ROOK]: parseInt(fenParsed.reserve[1]), - [V.KNIGHT]: parseInt(fenParsed.reserve[2]), - [V.BISHOP]: parseInt(fenParsed.reserve[3]), - [V.QUEEN]: parseInt(fenParsed.reserve[4]), - [V.KING]: parseInt(fenParsed.reserve[5]) + [V.PAWN]: reserve[0], + [V.ROOK]: reserve[1], + [V.KNIGHT]: reserve[2], + [V.BISHOP]: reserve[3], + [V.QUEEN]: reserve[4], + [V.KING]: reserve[5] }, b: { - [V.PAWN]: parseInt(fenParsed.reserve[6]), - [V.ROOK]: parseInt(fenParsed.reserve[7]), - [V.KNIGHT]: parseInt(fenParsed.reserve[8]), - [V.BISHOP]: parseInt(fenParsed.reserve[9]), - [V.QUEEN]: parseInt(fenParsed.reserve[10]), - [V.KING]: parseInt(fenParsed.reserve[11]) + [V.PAWN]: reserve[6], + [V.ROOK]: reserve[7], + [V.KNIGHT]: reserve[8], + [V.BISHOP]: reserve[9], + [V.QUEEN]: reserve[10], + [V.KING]: reserve[11] } }; } @@ -166,6 +186,13 @@ export class ParachuteRules extends ChessRules { return true; } + underCheck(color) { + if (this.kingPos[color][0] < 0) + // A king outside the board isn't under check + return false; + return this.isAttacked(this.kingPos[color], V.GetOppCol(color)); + } + prePlay(move) { super.prePlay(move); if (move.vanish.length == 0) this.reserve[this.turn][move.appear[0].p]--;