X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FArena.js;h=880f0082a97f4fa10f30b4c33c12561ef1f386c4;hb=4313762da3237b04f204e121a20cab3ba7bb5dd2;hp=b2b18ee6e981d8a1d8210ce5aba0a41b2e262dad;hpb=32f6285ee325a14286562a53baefc647201df2af;p=vchess.git diff --git a/client/src/variants/Arena.js b/client/src/variants/Arena.js index b2b18ee6..880f0082 100644 --- a/client/src/variants/Arena.js +++ b/client/src/variants/Arena.js @@ -1,6 +1,14 @@ import { ChessRules } from "@/base_rules"; export class ArenaRules extends ChessRules { + + static get Lines() { + return [ + [[2, 0], [2, 8]], + [[6, 0], [6, 8]] + ]; + } + static get HasFlags() { return false; } @@ -13,8 +21,39 @@ export class ArenaRules extends ChessRules { ); } - static GenRandInitFen(randomness) { - return ChessRules.GenRandInitFen(randomness).slice(0, -6) + "-"; + 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], 10); + 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(options) { + return ChessRules.GenRandInitFen(options).slice(0, -6) + "-"; } static InArena(x) { @@ -37,27 +76,13 @@ export class ArenaRules extends ChessRules { } getPotentialQueenMoves(sq) { - return this.getSlideNJumpMoves( - sq, - V.steps[V.ROOK].concat(V.steps[V.BISHOP]) - ).filter(m => { - // Filter out moves longer than 3 squares - return Math.max( - Math.abs(m.end.x - m.start.x), - Math.abs(m.end.y - m.start.y)) <= 3; - }); + return super.getSlideNJumpMoves( + sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 3); } getPotentialKingMoves(sq) { - return this.getSlideNJumpMoves( - sq, - V.steps[V.ROOK].concat(V.steps[V.BISHOP]) - ).filter(m => { - // Filter out moves longer than 3 squares - return Math.max( - Math.abs(m.end.x - m.start.x), - Math.abs(m.end.y - m.start.y)) <= 3; - }); + return super.getSlideNJumpMoves( + sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 3); } getCheckSquares() { @@ -69,6 +94,9 @@ export class ArenaRules extends ChessRules { return moves; } + postPlay() {} //no kingPos no castleFlags + postUndo() {} + getCurrentScore() { const color = this.turn; if (!this.atLeastOneMove()) @@ -109,4 +137,5 @@ export class ArenaRules extends ChessRules { static get SEARCH_DEPTH() { return 4; } + };