- return (
- super.getPotentialMovesFrom([x, y])
- .filter(m => m.end.y != 4 || ![0, 8].includes(m.end.x))
- );
+ const moves = super.getPotentialMovesFrom([x, y])
+ .filter(m => m.end.y != 4 || ![0, 8].includes(m.end.x));
+ // If bishop stuck in a corner: allow to jump over the next obstacle
+ if (
+ moves.length == 0 && piece == V.BISHOP &&
+ [0, 8].includes(x) && [0, 8].includes(y)
+ ) {
+ const indX = x == 0 ? [1, 2] : [7, 6];
+ const indY = y == 0 ? [1, 2] : [7, 6];
+ if (
+ this.board[indX[0]][indY[0]] != V.EMPTY &&
+ this.board[indX[1]][indY[1]] == V.EMPTY
+ ) {
+ return [super.getBasicMove([x, y], [indX[1], indY[1]])];
+ }
+ }
+ return moves;