private void PromptForDifficultyLevel()
        {
            TextEffects.DisplayLogo();
            Console.ForegroundColor = TextEffects.NeutralColor;
            Console.Write("                  1");
            Console.ResetColor();
            Console.WriteLine(". Easy");
            Console.ForegroundColor = TextEffects.NeutralColor;
            Console.Write("                  2");
            Console.ResetColor();
            Console.WriteLine(". Normal");
            Console.ForegroundColor = TextEffects.NeutralColor;
            Console.Write("                  3");
            Console.ResetColor();
            Console.WriteLine(". Unbeatable");
            Console.WriteLine();

            int currentCursorTop = Console.CursorTop;

            while (true)
            {
                Console.Write("               Enter your choice: ");
                Console.ForegroundColor = TextEffects.NeutralColor;
                string userInput = Console.ReadLine().Trim();
                Console.ResetColor();

                switch (userInput)
                {
                case "1":
                    Console.Clear();
                    DifficultyLevel = 1;
                    return;

                case "2":
                    Console.Clear();
                    DifficultyLevel = 2;
                    return;

                case "3":
                    Console.Clear();
                    DifficultyLevel = 3;
                    return;

                default:
                    //erase prompt, write error message, erase message, reset cursor
                    Console.SetCursorPosition(0, currentCursorTop);
                    Console.Write(" ", Console.WindowWidth);
                    Console.SetCursorPosition(0, currentCursorTop);
                    Console.ForegroundColor = TextEffects.ErrorColor;
                    Console.Write("              Enter 1, 2, or 3...             ");
                    Thread.Sleep(1000);
                    Console.ResetColor();
                    Console.SetCursorPosition(0, currentCursorTop);
                    Console.Write(" ", Console.WindowWidth);
                    Console.SetCursorPosition(0, currentCursorTop);
                    break;
                }
            }
        }
        private int PromptForGameMode()
        {
            TextEffects.DisplayLogo();
            Console.ForegroundColor = TextEffects.NeutralColor;
            Console.Write("                     0 ");
            Console.ResetColor();
            Console.WriteLine("Players");
            Console.ForegroundColor = TextEffects.NeutralColor;
            Console.Write("                     1 ");
            Console.ResetColor();
            Console.WriteLine("Player");
            Console.ForegroundColor = TextEffects.NeutralColor;
            Console.Write("                     2 ");
            Console.ResetColor();
            Console.WriteLine("Players");
            Console.WriteLine();

            int currentCursorTop = Console.CursorTop;

            while (true)
            {
                Console.Write("               Enter your choice: ");
                Console.ForegroundColor = TextEffects.NeutralColor;
                string userInput = Console.ReadLine().Trim();
                Console.ResetColor();

                switch (userInput)
                {
                case "0":
                    Console.Clear();
                    return(0);

                case "1":
                    Console.Clear();
                    PromptForDifficultyLevel();
                    Console.Clear();
                    return(1);

                case "2":
                    Console.Clear();
                    return(2);

                default:
                    //erase prompt, write error message, erase message, reset cursor
                    Console.SetCursorPosition(0, currentCursorTop);
                    Console.Write(" ", Console.WindowWidth);
                    Console.SetCursorPosition(0, currentCursorTop);
                    Console.ForegroundColor = TextEffects.ErrorColor;
                    Console.Write("              Enter 0, 1, or 2...             ");
                    Thread.Sleep(1000);
                    Console.ResetColor();
                    Console.SetCursorPosition(0, currentCursorTop);
                    Console.Write(" ", Console.WindowWidth);
                    Console.SetCursorPosition(0, currentCursorTop);
                    break;
                }
            }
        }
        private Player PromptToCreatePlayer(string mark = null)
        {
            TextEffects.DisplayLogo();
            int    currentCursorTop = Console.CursorTop;
            string userInput        = null;

            if (mark == null)
            {
                bool validInput = false;
                //prompt for their choice of mark
                while (!validInput)
                {
                    Console.WriteLine("                   X goes first.                   ");
                    Console.WriteLine();
                    Console.Write("          Would you like to be ");
                    Console.ForegroundColor = TextEffects.XMarkColor;
                    Console.Write("Xs ");
                    Console.ResetColor();
                    Console.Write("or ");
                    Console.ForegroundColor = TextEffects.OMarkColor;
                    Console.Write("Os");
                    Console.ResetColor();
                    Console.Write("? ");

                    Console.ForegroundColor = TextEffects.NeutralColor;
                    userInput = Console.ReadLine().Trim().ToUpper();
                    Console.ResetColor();
                    switch (userInput)
                    {
                    case "X":
                    case "XS":
                        mark = "X";
                        Console.SetCursorPosition(0, currentCursorTop);
                        Console.Write("                                                   ");
                        Console.Write("                                                   ");
                        Console.Write("                                                   ");
                        Console.Write("                                                   ");
                        Console.SetCursorPosition(0, currentCursorTop);
                        validInput = true;
                        break;

                    case "O":
                    case "OS":
                        mark = "O";
                        Console.SetCursorPosition(0, currentCursorTop);
                        Console.Write("                                                   ");
                        Console.Write("                                                   ");
                        Console.Write("                                                   ");
                        Console.Write("                                                   ");
                        Console.SetCursorPosition(0, currentCursorTop);
                        validInput = true;
                        break;

                    default:
                        Console.SetCursorPosition(0, currentCursorTop);
                        Console.WriteLine();
                        Console.WriteLine("                                                   ");
                        Console.WriteLine("                                                   ");
                        Console.WriteLine("                                                   ");
                        Console.SetCursorPosition(0, currentCursorTop);
                        Console.ForegroundColor = TextEffects.ErrorColor;
                        Console.WriteLine("                  Enter X or O...                  ");
                        Console.ResetColor();
                        Thread.Sleep(1000);
                        //erase the error message and reset cursor
                        Console.SetCursorPosition(0, currentCursorTop);
                        Console.Write(" ", Console.WindowWidth);
                        Console.SetCursorPosition(0, currentCursorTop);
                        continue;
                    }
                }
            }

            ConsoleColor playerTextColor = mark == "X" ? TextEffects.XMarkColor : TextEffects.OMarkColor;

            while (true)
            {
                //space it over
                Console.Write("   ");
                Console.Write("Player \"");
                Console.ForegroundColor = playerTextColor;
                Console.Write(mark);
                Console.ResetColor();
                Console.Write("\" please enter your name: ");
                Console.ForegroundColor = playerTextColor;
                userInput = Console.ReadLine();
                Console.ResetColor();
                if (userInput.Length < 1)
                {
                    Console.SetCursorPosition(0, currentCursorTop);
                    Console.ForegroundColor = TextEffects.ErrorColor;
                    Console.WriteLine("                Please try again...                ");
                    Console.ResetColor();
                    Thread.Sleep(800);
                    //erase the error message and reset cursor
                    Console.SetCursorPosition(0, currentCursorTop);
                    Console.Write("                   ");
                    Console.SetCursorPosition(0, currentCursorTop);
                    continue;
                }
                else if (userInput.Length > 12)
                {
                    Console.SetCursorPosition(0, currentCursorTop);
                    Console.ForegroundColor = TextEffects.ErrorColor;
                    Console.WriteLine(" Sorry, your name can only be 12 characters long.                                  ");
                    Console.ResetColor();
                    Thread.Sleep(1500);
                    //erase the error message and reset cursor
                    Console.SetCursorPosition(0, currentCursorTop);
                    Console.Write("                                                                            ");
                    Console.SetCursorPosition(0, currentCursorTop);
                    continue;
                }
                Console.SetCursorPosition(0, currentCursorTop);
                Console.Write("                                                                            ");
                Console.SetCursorPosition(0, currentCursorTop);
                break;
            }

            //say hello to the player in their color, then erase message
            Console.ForegroundColor = playerTextColor;
            //space it over
            Console.Write("                    ");
            Console.Write("Hello, " + userInput + "!");
            Thread.Sleep(1000);
            Console.Clear();
            Console.ResetColor();

            //return new Player(userInput, mark, false, playerTextColor);
            return(new Player()
            {
                Mark = mark, Name = userInput, TextColor = playerTextColor
            });
        }