public void UndoMovement(Position origin, Position destination, Piece capturedPiece) { Piece piece = Board.removePieceFromPosition(destination); piece.DecrementMovementQuantity(); if (capturedPiece != null) { Board.SetPieceInPosition(capturedPiece, destination); capturedPieces.Remove(capturedPiece); } Board.SetPieceInPosition(piece, origin); // #Castle Kingside if (piece is King && destination.Column == origin.Column + 2) { Position originT = new Position(origin.Line, origin.Column + 3); Position destinationT = new Position(origin.Line, origin.Column + 1); Piece T = Board.removePieceFromPosition(destinationT); T.DecrementMovementQuantity(); Board.SetPieceInPosition(T, originT); } // #Castle Queenside if (piece is King && destination.Column == origin.Column - 2) { Position originT = new Position(origin.Line, origin.Column - 4); Position destinationT = new Position(origin.Line, origin.Column - 1); Piece T = Board.removePieceFromPosition(destinationT); T.DecrementMovementQuantity(); Board.SetPieceInPosition(T, originT); } // #en passant if (piece is Pawn) { if (origin.Column != destination.Column && capturedPiece == VulnerableEnPassant) { Piece pawn = Board.removePieceFromPosition(destination); Position posP; if (piece.Color == Color.White) { posP = new Position(3, destination.Column); } else { posP = new Position(4, destination.Column); } Board.SetPieceInPosition(pawn, posP); } } }