X-Git-Url: https://git.auder.net/assets/icon_infos.svg?a=blobdiff_plain;f=public%2Fjavascripts%2Fvariants%2FAlice.js;h=4d105069e1cb55b1773723b9dcadd04c8cf04859;hb=a4cf093aa57faa18751e4978c1512558cce3417a;hp=3cba8d021f877505dd970b18337458ec1c2a0402;hpb=270968d6f8b17065cfe18279d9ee7973107a1048;p=vchess.git diff --git a/public/javascripts/variants/Alice.js b/public/javascripts/variants/Alice.js index 3cba8d02..4d105069 100644 --- a/public/javascripts/variants/Alice.js +++ b/public/javascripts/variants/Alice.js @@ -50,10 +50,8 @@ class AliceRules extends ChessRules return sideBoard; } - // TODO: castle & enPassant https://www.chessvariants.com/other.dir/alice.html - // TODO: enPassant seulement si l'on est du même coté que le coté de départ du pion adverse - // (en passant en sortant du monde... : il faut donc ajouter des coups non trouvés) - // castle: check that all destination squares are not occupied + // NOTE: castle & enPassant https://www.chessvariants.com/other.dir/alice.html + // --> Should be OK as is. getPotentialMovesFrom([x,y]) { let sideBoard = this.getBoardOfPiece([x,y]); @@ -67,8 +65,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))) @@ -76,12 +86,15 @@ class AliceRules extends ChessRules return false; } } - m.appear.forEach(psq => { - if (Object.keys(VariantRules.ALICE_CODES).includes(psq.p)) + // If the move is computed on board1, m.appear change for Alice pieces. + if (mirrorSide==1) + { + m.appear.forEach(psq => { //forEach: castling taken into account psq.p = VariantRules.ALICE_CODES[psq.p]; //goto board2 - else - psq.p = VariantRules.ALICE_PIECES[psq.p]; //goto board1 - }); + }); + } + else //move on board2: mark vanishing piece as Alice + m.vanish[0].p = VariantRules.ALICE_CODES[m.vanish[0].p] return true; }); }