package Game.ChessObj; public class ChessFigure { public enum Type { KING, QUEEN, CASTLE, BISHOP, KNIGHT, PAWN } public enum Team { WHITE, BLACK } private final Type type; private final Team team; public ChessFigure(Type type, Team team) { this.type = type; this.team = team; } public Type getType() { return this.type; } public Team getTeam() { return this.team; } public String getSymbol() { String symbol = ""; switch (getType()) { case KING: symbol = "K"; break; case QUEEN: symbol = "Q"; break; case CASTLE: symbol = "T"; break; case BISHOP: symbol = "I"; break; case KNIGHT: symbol = "Z"; break; case PAWN: symbol = "o"; break; default: } symbol = ((this.getTeam() == Team.WHITE) ? " " : "|") + symbol + ((this.getTeam() == Team.WHITE) ? " " : "|"); return symbol; } public boolean isRelativeMoveValid(int dx, int dy) { if (dx == 0 && dy == 0) return false; switch (getType()) { case KING: if (Math.abs(dx) == 1 && Math.abs(dy) == 1) return true; break; case QUEEN: if ((Math.abs(dx) == Math.abs(dy)) || (dx == 0 ^ dy == 0)) return true; break; case CASTLE: if (dx == 0 ^ dy == 0) return true; break; case BISHOP: if (Math.abs(dx) == Math.abs(dy)) return true; break; case KNIGHT: if ((dy == 2 && (dx == -1 || dx == 1)) || (dy == -2 && (dx == -1 || dx == 1)) || (dx == 2 && (dy == -1 || dy == 1)) || (dx == -2 && (dy == -1 || dy == 1))) return true; break; case PAWN: if (dx != 0) return false; if (getTeam() == Team.WHITE && (dy == 1)) return true; if (getTeam() == Team.BLACK && (dy == -1)) return true; break; default: } return false; } @Override public boolean equals(Object o) { if (!(o instanceof ChessFigure)) { return false; } ChessFigure x = (ChessFigure) o; if (this.getType() != x.getType() || this.getTeam() != x.getTeam()) return false; return true; } }