diff --git a/app/src/main/java/chess/model/ChessBoard.java b/app/src/main/java/chess/model/ChessBoard.java index db39c41..283bd2d 100644 --- a/app/src/main/java/chess/model/ChessBoard.java +++ b/app/src/main/java/chess/model/ChessBoard.java @@ -70,6 +70,7 @@ public class ChessBoard { pieceComes(movingPiece, move.getStart()); pieceLeaves(move.getFinish()); pieceComes(deadPiece, move.getDeadPieceCoords()); + assert movingPiece != null; movingPiece.unMove(); } diff --git a/app/src/main/java/chess/model/Move.java b/app/src/main/java/chess/model/Move.java index 02b58bc..14edf02 100644 --- a/app/src/main/java/chess/model/Move.java +++ b/app/src/main/java/chess/model/Move.java @@ -30,7 +30,7 @@ public class Move { 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!"; + assert Math.abs(diffY) < Coordinate.VALUE_MAX : "Move is too big!"; if (diffX == 0) return Math.abs(diffY); @@ -53,4 +53,11 @@ public class Move { 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; + } + } diff --git a/app/src/main/java/chess/model/visitor/PiecePathChecker.java b/app/src/main/java/chess/model/visitor/PiecePathChecker.java index 0a58c00..55e8f65 100644 --- a/app/src/main/java/chess/model/visitor/PiecePathChecker.java +++ b/app/src/main/java/chess/model/visitor/PiecePathChecker.java @@ -96,7 +96,14 @@ public class PiecePathChecker implements PieceVisitor { if (pieceToEat.getColor() == pawn.getColor()) return false; - if (lastMove.getMiddle().equals(this.move.getFinish()) + Direction lastMoveDir = Direction.findDirection(lastMove); + + if ((lastMoveDir != Direction.Front && lastMoveDir != Direction.Back) || lastMove.traversedCells() != 2) + return false; + + Coordinate middle = lastMove.getMiddle(); + + if (middle.equals(this.move.getFinish()) && new PawnIdentifier(pieceToEat.getColor()).isPawn(pieceToEat)) { this.move.setDeadPieceCoords(lastMove.getFinish()); return true;