forked from pabulaner/vivi
65 lines
1.9 KiB
Java
65 lines
1.9 KiB
Java
|
|
package de.vivi.chess.pieces;
|
||
|
|
|
||
|
|
import de.vivi.chess.board.Board;
|
||
|
|
import de.vivi.chess.board.Field;
|
||
|
|
|
||
|
|
public class Queen extends Piece {
|
||
|
|
public Queen(Color color, Type type) {
|
||
|
|
super(color, type);
|
||
|
|
}
|
||
|
|
|
||
|
|
public Queen(Color color, Type type, Field field) {
|
||
|
|
super(color, type, field);
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public char getSymbol() {
|
||
|
|
if (getColor() == Color.WHITE) {
|
||
|
|
if (getType() == Type.QUEEN) {
|
||
|
|
symbol = '\u265B';
|
||
|
|
}
|
||
|
|
|
||
|
|
} else if (getColor() == Color.BLACK) {
|
||
|
|
if (getType() == Type.QUEEN) {
|
||
|
|
symbol = '\u2655';
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return symbol;
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public boolean isValidMove(Board board, Field from, Field to) {
|
||
|
|
if (to.equals(from)) {
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
int rowDiff = Math.abs(to.getRow() - from.getRow());
|
||
|
|
int colDiff = Math.abs(to.getColumn() - from.getColumn());
|
||
|
|
|
||
|
|
boolean straightLine = from.getRow() == to.getRow()
|
||
|
|
|| from.getColumn() == to.getColumn();
|
||
|
|
|
||
|
|
boolean diagonal = rowDiff == colDiff;
|
||
|
|
|
||
|
|
if (!straightLine && !diagonal) {
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
int rowDirection = Integer.compare(to.getRow(), from.getRow());
|
||
|
|
int colDirection = Integer.compare(to.getColumn(), from.getColumn());
|
||
|
|
|
||
|
|
int currentRow = from.getRow() + rowDirection;
|
||
|
|
int currentCol = from.getColumn() + colDirection;
|
||
|
|
while (currentRow != to.getRow() || currentCol != to.getColumn()) {
|
||
|
|
if (board.getPiece(Field.from(currentCol, currentRow)) != null) {
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
currentRow += rowDirection;
|
||
|
|
currentCol += colDirection;
|
||
|
|
}
|
||
|
|
|
||
|
|
Piece destinationPiece = board.getPiece(Field.from(to.getColumn(), to.getRow()));
|
||
|
|
return destinationPiece == null || destinationPiece.getColor() != this.getColor();
|
||
|
|
}
|
||
|
|
}
|