64 lines
1.4 KiB
Java
64 lines
1.4 KiB
Java
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(diffY) < 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;
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object obj) {
|
|
if (obj instanceof Move other)
|
|
return this.start.equals(other.start) && this.finish.equals(other.finish);
|
|
return false;
|
|
}
|
|
|
|
}
|