package dev.kske.chess.board; import java.util.ArrayList; import java.util.List; /** * Project: Chess
* File: Bishop.java
* Created: 01.07.2019
* * @since Chess v0.1-alpha * @author Kai S. K. Engelbart */ public class Bishop extends Piece { /** * Creates bishop {@link Piece}. * * @param color the color of this bishop * @param board the board on which this bishop will be placed */ public Bishop(Color color, Board board) { super(color, board); } @Override public boolean isValidMove(Move move) { return move.isDiagonal() && isFreePath(move); } @Override protected List getPseudolegalMoves(Position pos) { List moves = new ArrayList<>(); // Diagonal moves to the lower right for (int i = pos.x + 1, j = pos.y + 1; i < 8 && j < 8; i++, j++) { Move move = new Move(pos, new Position(i, j)); if ( board.getDest(move) == null || board.getDest(move).getColor() != getColor() ) { moves.add(move); if (board.getDest(move) != null) break; } else break; } // Diagonal moves to the lower left for (int i = pos.x - 1, j = pos.y + 1; i >= 0 && j < 8; i--, j++) { Move move = new Move(pos, new Position(i, j)); if ( board.getDest(move) == null || board.getDest(move).getColor() != getColor() ) { moves.add(move); if (board.getDest(move) != null) break; } else break; } // Diagonal moves to the upper right for (int i = pos.x + 1, j = pos.y - 1; i < 8 && j >= 0; i++, j--) { Move move = new Move(pos, new Position(i, j)); if ( board.getDest(move) == null || board.getDest(move).getColor() != getColor() ) { moves.add(move); if (board.getDest(move) != null) break; } else break; } // Diagonal moves to the upper left for (int i = pos.x - 1, j = pos.y - 1; i >= 0 && j >= 0; i--, j--) { Move move = new Move(pos, new Position(i, j)); if ( board.getDest(move) == null || board.getDest(move).getColor() != getColor() ) { moves.add(move); if (board.getDest(move) != null) break; } else break; } return moves; } @Override public int getValue() { return 30; } }