public void MakeMove(Position origin, Position destiny)
        {
            Piece takenPiece = ChessMove(origin, destiny);

            if (IsInCheck(CurrentPlayer))
            {
                UndoChessMove(origin, destiny, takenPiece);
                throw new BoardExceptions("You can not put your self in check");
            }

            Piece movedPiece = Board.GetPiece(destiny);

            //Special move: Pawn Promotion
            if (movedPiece is Pawn)
            {
                if ((movedPiece.Color == Color.White && destiny.Line == 0) || (movedPiece.Color == Color.Black && destiny.Line == 7))
                {
                    Board.RemovePiece(destiny);
                    GamePieces.Remove(movedPiece);
                    Console.WriteLine("Type the kind of piece you want to promote your pawn to");
                    Console.Write("(QUEEN / ROOK / KNIGHT / BISHOP): ");
                    string playerChoice = Console.ReadLine();
                    if (!ScreenController.CheckPlayerChoice(playerChoice))
                    {
                        throw new BoardExceptions("Not valid option");
                    }
                    playerChoice = playerChoice.ToLower();
                    switch (playerChoice)
                    {
                    case "queen":
                    {
                        Piece newPiece = new Queen(movedPiece.Color, Board);
                        Board.AddressPiece(newPiece, destiny);
                        GamePieces.Add(newPiece);
                        break;
                    }

                    case "rook":
                    {
                        Piece newPiece = new Rook(movedPiece.Color, Board);
                        Board.AddressPiece(newPiece, destiny);
                        GamePieces.Add(newPiece);
                        break;
                    }

                    case "knight":
                    {
                        Piece newPiece = new Knight(movedPiece.Color, Board);
                        Board.AddressPiece(newPiece, destiny);
                        GamePieces.Add(newPiece);
                        break;
                    }

                    case "bishop":
                    {
                        Piece newPiece = new Bishop(movedPiece.Color, Board);
                        Board.AddressPiece(newPiece, destiny);
                        GamePieces.Add(newPiece);
                        break;
                    }
                    }
                }
            }
            //EndGame Pawn Promotion

            if (IsInCheck(EnemyIs(CurrentPlayer)))
            {
                PlayerInCheck = true;
            }
            else
            {
                PlayerInCheck = false;
            }

            if (IsInCheckMate(EnemyIs(CurrentPlayer)))
            {
                EndGame = true;
            }
            else
            {
                Turn++;
                MudaJogador();
            }

            //Special move: en passant
            if (movedPiece is Pawn && (destiny.Line == origin.Line + 2 || destiny.Line == origin.Line - 2))
            {
                VulnerableToEnPassant = movedPiece;
            }
            else
            {
                VulnerableToEnPassant = null;
            }
        }