X-Git-Url: https://git.auder.net/variants/Cwda/complete_rules.html?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FOmega.js;h=7b5576cff2b29a6f04c37a6a488f280ce2959528;hb=f6c6d0c3c1b2fa33f8c7cfbbc1e9ab869c0054dd;hp=fa95f5e326c593c35011255362a62a725ab56993;hpb=472c0c4f5aa29d96e080873ebfce2a04f664d852;p=vchess.git diff --git a/client/src/variants/Omega.js b/client/src/variants/Omega.js index fa95f5e3..7b5576cf 100644 --- a/client/src/variants/Omega.js +++ b/client/src/variants/Omega.js @@ -36,6 +36,28 @@ export class OmegaRules extends ChessRules { return ([V.CHAMPION, V.WIZARD].includes(b[1]) ? "Omega/" : "") + 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]); + 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; + } + // NOTE: keep this extensive check because the board has holes static IsGoodEnpassant(enpassant) { if (enpassant != "-") { @@ -252,7 +274,7 @@ export class OmegaRules extends ChessRules { } } - getEnpassanCaptures([x, y], shiftX) { + getEnpassantCaptures([x, y], shiftX) { const Lep = this.epSquares.length; const epSquare = this.epSquares[Lep - 1]; let moves = []; @@ -447,4 +469,17 @@ export class OmegaRules extends ChessRules { k: 1000 }; } + + evalPosition() { + let evaluation = 0; + for (let i = 0; i < V.size.x; i++) { + for (let j = 0; j < V.size.y; j++) { + if (![V.EMPTY,V.NOTHING].includes(this.board[i][j])) { + const sign = this.getColor(i, j) == "w" ? 1 : -1; + evaluation += sign * V.VALUES[this.getPiece(i, j)]; + } + } + } + return evaluation; + } };