import java.util.*; import javax.swing.ImageIcon; public class Pawn extends Piece { boolean hasMoved; int colorDir; public Pawn(int x, int y, String color) { super(x, y, color, new ImageIcon("sprites/" + color + "/pawn.png").getImage()); hasMoved = false; colorDir = color.equals("White") ? -1 : 1; } public ArrayList getLegalMoves(Board board) { ArrayList positions = new ArrayList(); // diagonal moves (captures) if (Board.inBounds(new Position(pos.x + 1, pos.y + colorDir)) && !board.isOpen(new Position(pos.x + 1, pos.y + colorDir)) && !board.board[pos.x + 1][pos.y + colorDir].color.equals(this.color)) { positions.add(new Position(pos.x + 1, pos.y + colorDir)); } if (Board.inBounds(new Position(pos.x - 1, pos.y + colorDir)) && !board.isOpen(new Position(pos.x - 1, pos.y + colorDir)) && !board.board[pos.x - 1][pos.y + colorDir].color.equals(this.color)) { positions.add(new Position(pos.x - 1, pos.y + colorDir)); } // one square in front: if blocked return early if (Board.inBounds(new Position(pos.x, pos.y + colorDir)) && board.isOpen(new Position(pos.x, pos.y + colorDir))) { positions.add(new Position(pos.x, pos.y + colorDir)); } else return positions; // two squares in front if (!hasMoved && board.isOpen(new Position(pos.x, pos.y + 2 * colorDir))) { positions.add(new Position(pos.x, pos.y + 2 * colorDir)); } return positions; } }