X-Git-Url: https://git.auder.net/assets/icon_infos.svg?a=blobdiff_plain;f=public%2Fjavascripts%2Fvariants%2FAlice.js;h=3d79580fd7977c92effb4046e39c9ddd1e531726;hb=9de73b71a1db5464f89a202e6cdfdc7b6b6b0753;hp=1e1ce46dc47da9740cf403a4eb319a57d653839e;hpb=f6cc7faf4301dc4a7ae5bb07f16403f280beddc3;p=vchess.git diff --git a/public/javascripts/variants/Alice.js b/public/javascripts/variants/Alice.js index 1e1ce46d..3d79580f 100644 --- a/public/javascripts/variants/Alice.js +++ b/public/javascripts/variants/Alice.js @@ -28,6 +28,38 @@ class AliceRules extends ChessRules return (Object.keys(this.ALICE_PIECES).includes(b[1]) ? "Alice/" : "") + b; } + initVariables(fen) + { + super.initVariables(fen); + const fenParts = fen.split(" "); + const position = fenParts[0].split("/"); + if (this.kingPos["w"][0] < 0 || this.kingPos["b"][0] < 0) + { + // INIT_COL_XXX won't be used, so no need to set them for Alice kings + for (let i=0; i Should be OK as is. getPotentialMovesFrom([x,y]) { let sideBoard = this.getBoardOfPiece([x,y]); @@ -67,8 +98,20 @@ class AliceRules extends ChessRules // Finally filter impossible moves const mirrorSide = (Object.keys(VariantRules.ALICE_CODES).includes(this.getPiece(x,y)) ? 1 : 2); return moves.filter(m => { - if (this.board[m.end.x][m.end.y] != VariantRules.EMPTY) + 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)) + { + return false; + } + }); + } + else if (this.board[m.end.x][m.end.y] != VariantRules.EMPTY) + { + // Attempt to capture const piece = this.getPiece(m.end.x,m.end.y); if ((mirrorSide==1 && Object.keys(VariantRules.ALICE_PIECES).includes(piece)) || (mirrorSide==2 && Object.keys(VariantRules.ALICE_CODES).includes(piece))) @@ -83,8 +126,15 @@ class AliceRules extends ChessRules psq.p = VariantRules.ALICE_CODES[psq.p]; //goto board2 }); } - else //move on board2: mark vanishing piece as Alice - m.vanish[0].p = VariantRules.ALICE_CODES[m.vanish[0].p] + else //move on board2: mark vanishing pieces as Alice + { + m.vanish.forEach(psq => { + psq.p = VariantRules.ALICE_CODES[psq.p]; + }); + } + // Fix en-passant captures + if (m.vanish.length == 2 && this.board[m.end.x][m.end.y] == VariantRules.EMPTY) + m.vanish[1].c = this.getOppCol(this.getColor(x,y)); return true; }); } @@ -117,6 +167,28 @@ class AliceRules extends ChessRules return res; } + updateVariables(move) + { + super.updateVariables(move); //standard king + const piece = this.getPiece(move.start.x,move.start.y); + const c = this.getColor(move.start.x,move.start.y); + // "l" = Alice king + if (piece == "l") + { + this.kingPos[c][0] = move.appear[0].x; + this.kingPos[c][1] = move.appear[0].y; + this.castleFlags[c] = [false,false]; + } + } + + unupdateVariables(move) + { + super.unupdateVariables(move); + const c = this.getColor(move.start.x,move.start.y); + if (this.getPiece(move.start.x,move.start.y) == "l") + this.kingPos[c] = [move.start.x, move.start.y]; + } + getNotation(move) { if (move.appear.length == 2 && move.appear[0].p == VariantRules.KING) @@ -156,4 +228,21 @@ class AliceRules extends ChessRules this.board = saveBoard; return res; } + + static get VALUES() { + return { + 'p': 1, + 's': 1, + 'r': 5, + 'u': 5, + 'n': 3, + 'o': 3, + 'b': 3, + 'c': 3, + 'q': 9, + 't': 9, + 'k': 1000, + 'l': 1000 + }; + } }