package de.vivi.chess.pieces; import de.vivi.chess.board.Board; import de.vivi.chess.board.Field; public class Pawn extends Piece { public Pawn(Color color, Type type) { super(color, type); } public Pawn(Color color, Type type, Field field) { super(color, type, field); } @Override public char getSymbol() { if (getColor() == Color.WHITE) { if (getType() == Type.PAWN) { symbol = '\u265F'; } } else if (getColor() == Color.BLACK) { if (getType() == Type.PAWN) { symbol = '\u2659'; } } return symbol; } @Override public boolean isValidMove(Board board, Field from, Field to) { int forwardDirection = getColor() == Color.WHITE ? -1 : 1; System.out.println("forwardDirection " + forwardDirection); System.out.println("to.getRow() " + to.getRow()); System.out.println("from.getRow() " + from.getRow()); int rowDiff = (to.getRow() - from.getRow()) * forwardDirection; System.out.println("rowDiff " + rowDiff); int colDiff = to.getColumn() - from.getColumn(); System.out.println("colDiff " + colDiff); System.out.println("black pawn links " + board.getPiece(0,1)); if (colDiff == 0 && rowDiff == 1 && board.getPiece(to) == null) { return true; } boolean isStartingField = (getColor() == Color.WHITE && from.getRow() == 6) || (getColor() == Color.BLACK && from.getRow() == 1); System.out.println("getColor() " + getColor()); System.out.println("from.getRow() " + from.getRow()); System.out.println("isStartingField " + isStartingField); System.out.println("board.getPiece(to) " + board.getPiece(to)); if (colDiff == 0 && rowDiff == 2 && isStartingField && board.getPiece(to) == null) { int middleRow = from.getRow() + forwardDirection; System.out.println("from.getRow() " +from.getRow()); System.out.println("middleRow " + middleRow); System.out.println("from.getColumn() " + from.getColumn()); if (board.getPiece(Field.from(from.getColumn(), middleRow)) == null) { return true; } } if (Math.abs(colDiff) == 1 && rowDiff == 1 && board.getPiece(to) != null && board.getPiece(to).getColor() != this.getColor()) { return true; } return false; } }