package chess.model; public class Move { private final Coordinate start; private final Coordinate finish; private Coordinate deadPieceCoords; public Move(Coordinate start, Coordinate finish) { this.start = start; this.finish = finish; this.deadPieceCoords = finish; } public boolean isValid() { return this.start.isValid() && this.finish.isValid() && !this.start.equals(this.finish); } public Coordinate getStart() { return start; } public Coordinate getFinish() { return finish; } public int traversedCells() { assert isValid() : "Move is invalid!"; int diffX = getFinish().getX() - getStart().getX(); int diffY = getFinish().getY() - getStart().getY(); assert Math.abs(diffX) < Coordinate.VALUE_MAX : "Move is too big!"; assert Math.abs(diffX) < Coordinate.VALUE_MAX : "Move is too big!"; if (diffX == 0) return Math.abs(diffY); if (diffY == 0) return Math.abs(diffX); if (Math.abs(diffX) == Math.abs(diffY)) return Math.abs(diffX); return 0; } public Coordinate getMiddle() { return Coordinate.fromIndex((getStart().toIndex() + getFinish().toIndex()) / 2); } public void setDeadPieceCoords(Coordinate deadCoords) { this.deadPieceCoords = deadCoords; } public Coordinate getDeadPieceCoords() { return deadPieceCoords; } }