Esempio n. 1
0
  private List<Square> validMovesForPawn(Square square) {
    List<Square> validMoves = new ArrayList<Square>();

    // Regular moves, 1 or 2 up or down depending on color
    Piece piece = square.getPiece();
    if (piece.isWhite()) {
      int movesUp = piece.movesUp();
      if (square.containsPawnOnStartingRow()) movesUp += 1;
      validMoves.addAll(validMovesForSquareInDirection(square, movesUp, 1, 0, 0, 0));
    } else {
      int movesDown = piece.movesDown();
      if (square.containsPawnOnStartingRow()) movesDown += 1;
      validMoves.addAll(validMovesForSquareInDirection(square, movesDown, 0, 0, 1, 0));
    }

    // Attacking move
    int rowColPairs[][] = {{-1, -1}, {-1, 1}};
    for (int i = 0; i < rowColPairs.length; i++) {
      int row = square.Row + rowColPairs[i][0];
      int col = square.Col + rowColPairs[i][1];
      if (rowAndColAreWithinBounds(row, col)) {
        Square s = Board[row][col];
        if (s.isOccupiedByPieceOfColor(square.getPiece().oppositeColor())) validMoves.add(s);
      }
    }

    return validMoves;
  }
Esempio n. 2
0
  private List<Square> validMovesForPieceOnSquareExCheck(Square square) {
    Piece piece = square.getPiece();
    List<Square> validMoves = new ArrayList<Square>();

    // Special moves the piece is a pawn or a knight
    if (piece.canMoveLikePawn()) return validMovesForPawn(square);
    if (piece.canMoveLikeKnight()) return validMovesForKnight(square);

    // Add all normal directional moves
    validMoves.addAll(validMovesForSquareInDirection(square, piece.movesUp(), 1, 0, 0, 0));
    validMoves.addAll(validMovesForSquareInDirection(square, piece.movesSide(), 0, 1, 0, 0));
    validMoves.addAll(validMovesForSquareInDirection(square, piece.movesDown(), 0, 0, 1, 0));
    validMoves.addAll(validMovesForSquareInDirection(square, piece.movesSide(), 0, 0, 0, 1));
    validMoves.addAll(validMovesForSquareInDirection(square, piece.movesDiagonal(), 1, 1, 0, 0));
    validMoves.addAll(validMovesForSquareInDirection(square, piece.movesDiagonal(), 1, 0, 0, 1));
    validMoves.addAll(validMovesForSquareInDirection(square, piece.movesDiagonal(), 0, 1, 1, 0));
    validMoves.addAll(validMovesForSquareInDirection(square, piece.movesDiagonal(), 0, 0, 1, 1));

    return validMoves;
  }