public void undoMovement(Position origin, Position destiny, Piece capturedPiece) { Piece piece = board.RemovePiece(destiny); piece.decreaseMovementAmount(); if (capturedPiece != null) { board.putPiece(capturedPiece, destiny); captured.Remove(capturedPiece); } board.putPiece(piece, origin); // #special move Castle Kingside if (piece is King && destiny.column == origin.column + 2) { Position originRook = new Position(origin.line, origin.column + 3); Position destinyRook = new Position(origin.line, origin.column + 1); Piece rook = board.RemovePiece(destinyRook); rook.decreaseMovementAmount(); board.putPiece(rook, originRook); } // #special move Castle Queenside if (piece is King && destiny.column == origin.column - 2) { Position originRook = new Position(origin.line, origin.column - 4); Position destinyRook = new Position(origin.line, origin.column - 1); Piece rook = board.RemovePiece(destinyRook); rook.decreaseMovementAmount(); board.putPiece(rook, originRook); } // #special move en passant if (piece is Pawn) { if (origin.column != destiny.column && capturedPiece == vulnerableEnPassant) { Piece pawn = board.RemovePiece(destiny); Position positionPawn; if (piece.color == Color.Whrite) { positionPawn = new Position(3, destiny.column); } else { positionPawn = new Position(4, destiny.column); } board.putPiece(pawn, positionPawn); } } }