private IMoveResult PlayerMoveHelper()
        {
            Console.WriteLine($"\n ==================== {_player} ===================== ");
            Position from        = UserInteraction.GetPositionFromUser("Position of your figure: ");
            Position destination = UserInteraction.GetPositionFromUser("Destination position: ");

            IMoveResult moveResult = _gameConductor.DoMove(from, destination);
            var         isValid    = moveResult.IsValidMove();

            while (isValid.Status != MoveResultStatus.Valid)
            {
                Console.WriteLine($"Invalid move: {isValid.Cause}");
                PlayerMoveHelper();
            }
            BoardDisplay.ShowFullInfoBoard(moveResult);

            Console.WriteLine("Select action");
            Console.WriteLine("1. Submit");
            Console.WriteLine("2. Undo");
            Console.WriteLine("3. Save");

            int choice = UserInteraction.GetNumberFromUser("", "Option not found, please try again", 1, 3);

            if (choice == 2)
            {
                Console.WriteLine(_gameConductor.Undo() ? "The move has been reversed." : "Cannot reverse move.");
                BoardDisplay.ShowFullInfoBoard(moveResult);
                return(PlayerMoveHelper());
            }
            if (choice == 3)
            {
                return(SaveGame(moveResult));
            }
            return(moveResult);
        }
        private IMoveResult MoveHelper()
        {
            var         movePositions = GetMovePositions();
            IMoveResult moveResult    = _gameConductor.DoMove(movePositions.From, movePositions.Destination);
            var         isValid       = moveResult.IsValidMove();

            while (isValid.Status != MoveResultStatus.Valid)
            {
                Console.WriteLine($"Invalid move: {isValid.Cause}");
                return(MoveHelper());
            }
            BoardDisplay.ShowFullInfoBoard(moveResult);
            return(moveResult);
        }
        private void UserMove(IMoveResult moveResult, int userIdx)
        {
            while (!moveResult.IsCheckMate(_players[userIdx].TeamColor))
            {
                moveResult = NextTurn(moveResult, userIdx);
                if (moveResult.IsValidMove().Status == MoveResultStatus.Stopped)
                {
                    return;
                }

                userIdx = userIdx == 1 ? 0 : 1;
            }
            EndGame(userIdx);
        }
        private void PlayerMove(IMoveResult moveResult)
        {
            BoardDisplay.ShowFullInfoBoard(moveResult);
            if (moveResult.IsCheckMate(_player.TeamColor))
            {
                Console.WriteLine("\n \n \n \n");
                Console.WriteLine($"Computer wins!");
                return;
            }

            moveResult = PlayerMoveHelper();
            if (moveResult.IsValidMove().Status != MoveResultStatus.Stopped)
            {
                ComputerMove(moveResult);
            }
        }