X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FWormhole.js;h=05d8f2ae8f84621fb253879aea029136025e3e54;hb=2a0672a98b555f0fecfd951d583e69419769d411;hp=f47fea3985a05b2ed7e4030e1fe479d503e75c95;hpb=32f6285ee325a14286562a53baefc647201df2af;p=vchess.git diff --git a/client/src/variants/Wormhole.js b/client/src/variants/Wormhole.js index f47fea39..05d8f2ae 100644 --- a/client/src/variants/Wormhole.js +++ b/client/src/variants/Wormhole.js @@ -1,6 +1,7 @@ import { ChessRules } from "@/base_rules"; export class WormholeRules extends ChessRules { + static get HasFlags() { return false; } @@ -28,13 +29,36 @@ export class WormholeRules extends ChessRules { return b; } + static IsGoodPosition(position) { + if (position.length == 0) return false; + const rows = position.split("/"); + if (rows.length != V.size.x) return false; + let kings = { "k": 0, "K": 0 }; + 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]]++; + if (['x'].concat(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; + } + if (Object.values(kings).some(v => v != 1)) return false; + return true; + } + getSquareAfter(square, movement) { let shift1, shift2; if (Array.isArray(movement[0])) { // A knight shift1 = movement[0]; shift2 = movement[1]; - } else { + } + else { shift1 = movement; shift2 = null; } @@ -270,8 +294,7 @@ export class WormholeRules extends ChessRules { } getCurrentScore() { - if (this.atLeastOneMove()) - return "*"; + if (this.atLeastOneMove()) return "*"; // No valid move: I lose return this.turn == "w" ? "0-1" : "1-0"; } @@ -306,4 +329,5 @@ export class WormholeRules extends ChessRules { notation += "=" + move.appear[0].p.toUpperCase(); return notation; } + };