X-Git-Url: https://git.auder.net/assets/rpsls.css?a=blobdiff_plain;f=public%2Fjavascripts%2Fvariants%2FAlice.js;h=b286bf6679cda027acd8fc12caad5a23c83e5829;hb=794b8a9863358c4572726c0d89704271efcf2527;hp=b7f5a3e1cd77ab191dea341bfe9d82d72fa9f7fb;hpb=4b3539364e8fea527158f4ba27db1c0870ffd2fc;p=vchess.git diff --git a/public/javascripts/variants/Alice.js b/public/javascripts/variants/Alice.js index b7f5a3e1..b286bf66 100644 --- a/public/javascripts/variants/Alice.js +++ b/public/javascripts/variants/Alice.js @@ -61,23 +61,28 @@ class AliceRules extends ChessRules } } + // Return the (standard) color+piece notation at a square for a board + getSquareOccupation(i, j, mirrorSide) + { + const piece = this.getPiece(i,j); + const V = VariantRules; + if (mirrorSide==1 && Object.keys(V.ALICE_CODES).includes(piece)) + return this.board[i][j]; + else if (mirrorSide==2 && Object.keys(V.ALICE_PIECES).includes(piece)) + return this.getColor(i,j) + V.ALICE_PIECES[piece]; + return ""; + } + // Build board of the given (mirror)side getSideBoard(mirrorSide) { - const V = VariantRules; // Build corresponding board from complete board - const [sizeX,sizeY] = V.size; + const [sizeX,sizeY] = VariantRules.size; let sideBoard = doubleArray(sizeX, sizeY, ""); for (let i=0; i { if (m.appear.length == 2) //castle { - // If appear[i] not in vanish array, then must be empty square on other board - m.appear.forEach(psq => { - if (this.board[psq.x][psq.y] != VariantRules.EMPTY && - ![m.vanish[0].y,m.vanish[1].y].includes(psq.y)) - { + // appear[i] must be an empty square on the other board + for (let psq of m.appear) + { + if (this.getSquareOccupation(psq.x,psq.y,3-mirrorSide) != VariantRules.EMPTY) return false; - } - }); + } } else if (this.board[m.end.x][m.end.y] != VariantRules.EMPTY) { @@ -223,7 +226,7 @@ class AliceRules extends ChessRules const mirrorSide = sideBoard[0][kp[0]][kp[1]] != VariantRules.EMPTY ? 1 : 2; let saveBoard = this.board; this.board = sideBoard[mirrorSide-1]; - let res = this.isAttacked(kp, this.getOppCol(color)); + let res = this.isAttacked(kp, [this.getOppCol(color)]); this.board = saveBoard; this.undoSide(move, sideBoard); return res; @@ -239,7 +242,7 @@ class AliceRules extends ChessRules let sideBoard = this.getSideBoard(mirrorSide); let saveBoard = this.board; this.board = sideBoard; - let res = this.isAttacked(this.kingPos[color], this.getOppCol(color)) + let res = this.isAttacked(this.kingPos[color], [this.getOppCol(color)]) ? [ JSON.parse(JSON.stringify(this.kingPos[color])) ] : [ ]; this.board = saveBoard; @@ -279,7 +282,7 @@ class AliceRules extends ChessRules let saveBoard = this.board; this.board = sideBoard; let res = "*"; - if (!this.isAttacked(this.kingPos[color], this.getOppCol(color))) + if (!this.isAttacked(this.kingPos[color], [this.getOppCol(color)])) res = "1/2"; else res = (color == "w" ? "0-1" : "1-0");