public void UndoChessMove(Position origin, Position destiny, Piece takenPiece)
        {
            Piece returnedPiece = Board.RemovePiece(destiny);

            returnedPiece.DecreaseQtyMovement();
            Board.AddressPiece(returnedPiece, origin);
            if (takenPiece != null)
            {
                Board.AddressPiece(takenPiece, destiny);
                CapturedPieces.Remove(takenPiece);
            }

            //Special move: Castling
            //Short Castling
            if (returnedPiece is King && destiny.Column == origin.Column + 2)
            {
                Position rookOrigin  = new Position(origin.Line, origin.Column + 3);
                Position rookDestiny = new Position(origin.Line, origin.Column + 1);
                Piece    movedRook   = Board.RemovePiece(rookDestiny);
                movedRook.DecreaseQtyMovement();
                Board.AddressPiece(movedRook, rookOrigin);
            }
            //Long Castling
            if (returnedPiece is King && destiny.Column == origin.Column - 2)
            {
                Position rookOrigin  = new Position(origin.Line, origin.Column - 4);
                Position rookDestiny = new Position(origin.Line, origin.Column - 1);
                Piece    movedRook   = Board.RemovePiece(rookDestiny);
                movedRook.DecreaseQtyMovement();
                Board.AddressPiece(movedRook, rookOrigin);
            }

            //Special move: En passant
            if (returnedPiece is Pawn)
            {
                if (origin.Column != destiny.Column && takenPiece == VulnerableToEnPassant)
                {
                    Piece    EnPassantCapture = Board.RemovePiece(destiny);
                    Position EnPassantReturnPosition;
                    if (returnedPiece.Color == Color.White)
                    {
                        EnPassantReturnPosition = new Position(3, destiny.Column);
                    }
                    else
                    {
                        EnPassantReturnPosition = new Position(4, destiny.Column);
                    }
                    Board.AddressPiece(EnPassantCapture, EnPassantReturnPosition);
                }
            }
        }