1
0
forked from pabulaner/vivi
vivi-exercises/chess/pieces/Pawn.java
2025-05-20 09:17:32 +02:00

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;
}
}