forked from pabulaner/vivi
74 lines
2.5 KiB
Java
74 lines
2.5 KiB
Java
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;
|
|
}
|
|
}
|