- if (this.board[x+shiftX][y] == V.EMPTY)
- {
- // One square forward
- for (let piece of finalPieces)
- moves.push(this.getBasicMove([x,y], [x+shiftX,y], {c:color,p:piece}));
- if (startRanks.includes(x))
- {
- if (this.board[x+2*shiftX][y] == V.EMPTY)
- {
- // Two squares jump
- moves.push(this.getBasicMove([x,y], [x+2*shiftX,y]));
- if (x==startRanks[0] && this.board[x+3*shiftX][y] == V.EMPTY)
- {
- // Three squares jump
- moves.push(this.getBasicMove([x,y], [x+3*shiftX,y]));
- }
- }
- }
- }
- // Captures
- for (let shiftY of [-1,1])
- {
- if (y + shiftY >= 0 && y + shiftY < sizeY
- && this.board[x+shiftX][y+shiftY] != V.EMPTY
- && this.canTake([x,y], [x+shiftX,y+shiftY]))
- {
- for (let piece of finalPieces)
- {
- moves.push(this.getBasicMove([x,y], [x+shiftX,y+shiftY],
- {c:color,p:piece}));
- }
- }
- }
+ // Pawns jump 2 or 3 squares, and promote to queen or wildebeest
+ getPotentialPawnMoves([x, y]) {
+ const color = this.turn;
+ let moves = [];
+ const [sizeX, sizeY] = [V.size.x, V.size.y];
+ const shiftX = color == "w" ? -1 : 1;
+ const startRanks = color == "w" ? [sizeX - 2, sizeX - 3] : [1, 2];
+ const lastRank = color == "w" ? 0 : sizeX - 1;
+ const finalPieces =
+ x + shiftX == lastRank ? [V.ROOK, V.KNIGHT, V.BISHOP, V.QUEEN] : [V.PAWN];