From 364128d9de9036ff20e5f6400e8fcec6839706f9 Mon Sep 17 00:00:00 2001 From: Benjamin Auder <benjamin.auder@somewhere> Date: Sun, 2 Dec 2018 22:47:10 +0100 Subject: [PATCH] Fix a bug in Alice chess when castling --- public/javascripts/variants/Alice.js | 35 +++++++++++++++------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/public/javascripts/variants/Alice.js b/public/javascripts/variants/Alice.js index 5aa9ee81..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<sizeX; i++) { for (let j=0; j<sizeY; j++) - { - const piece = this.getPiece(i,j); - if (mirrorSide==1 && Object.keys(V.ALICE_CODES).includes(piece)) - sideBoard[i][j] = this.board[i][j]; - else if (mirrorSide==2 && Object.keys(V.ALICE_PIECES).includes(piece)) - sideBoard[i][j] = this.getColor(i,j) + V.ALICE_PIECES[piece]; - } + sideBoard[i][j] = this.getSquareOccupation(i, j, mirrorSide); } return sideBoard; } @@ -99,14 +104,12 @@ class AliceRules extends ChessRules let res = moves.filter(m => { 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) { -- 2.44.0