X-Git-Url: https://git.auder.net/?p=vchess.git;a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FArena.js;h=33940b8345cdb2cafbb4b3e2ea8f723c60550539;hp=b2b18ee6e981d8a1d8210ce5aba0a41b2e262dad;hb=6f2f94374f1e73c375edf732d9425e575e81fff7;hpb=9dca2c935cebcaa3817b4f926f482f9cad4c5b53 diff --git a/client/src/variants/Arena.js b/client/src/variants/Arena.js index b2b18ee6..33940b83 100644 --- a/client/src/variants/Arena.js +++ b/client/src/variants/Arena.js @@ -13,6 +13,37 @@ export class ArenaRules extends ChessRules { ); } + static IsGoodPosition(position) { + if (position.length == 0) return false; + const rows = position.split("/"); + if (rows.length != V.size.x) return false; + // At most and at least one king or queen per color + let royals = { "k": 0, "K": 0, "q": 0, "Q": 0 }; + for (let row of rows) { + let sumElts = 0; + for (let i = 0; i < row.length; i++) { + if (['K','k','Q','q'].includes(row[i])) royals[row[i]]++; + if (V.PIECES.includes(row[i].toLowerCase())) sumElts++; + else { + const num = parseInt(row[i]); + if (isNaN(num)) return false; + sumElts += num; + } + } + if (sumElts != V.size.y) return false; + } + if ( + Object.values(royals).some(v => v >= 2) || + royals['K'] + royals['Q'] == 0 || + royals['k'] + royals['q'] == 0 + ) { + return false; + } + return true; + } + + scanKings() {} + static GenRandInitFen(randomness) { return ChessRules.GenRandInitFen(randomness).slice(0, -6) + "-"; }