/// <summary>
        /// Represents the Cows And Bulls game UI
        /// </summary>
        public static void Main()
        {
            SecretNumber bullsAndCowsNumber = new SecretNumber();
            Scoreboard scoreBoard = new Scoreboard(SCORES_FILE);

            Console.WriteLine(WELCOME_MESSAGE);

            string command = string.Empty;

            while (true)
            {
                Console.Write(INPUT_MESSAGE);

                command = Console.ReadLine();

                if (command == EXIT_COMMAND) //this stays here, not in the swich, because break the while loop
                {
                    Console.WriteLine(GOOD_BYE_MESSAGE);
                    break;
                }

                switch (command)
                {
                    case TOP_COMMAND:
                        Console.Write(scoreBoard);
                        break;
                    case RESTART_COMMAND:
                        Console.WriteLine();
                        Console.WriteLine(WELCOME_MESSAGE);
                        bullsAndCowsNumber = new SecretNumber();
                        break;
                    case HELP_COMMAND:
                        Console.WriteLine("The number looks like {0}.", bullsAndCowsNumber.GetCheat());
                        break;
                    default:
                        try
                        {
                            Result guessResult = bullsAndCowsNumber.CheckUserGuess(command);
                            if (guessResult.Bulls == 4)
                            {
                                string attempt = bullsAndCowsNumber.GuessesCount == 1 ? "attempt" : "attempts";
                                string cheat = bullsAndCowsNumber.CheatsCount == 1 ? "cheat" : "cheats";

                                if (bullsAndCowsNumber.CheatsCount == 0)
                                {
                                    Console.Write(NUMBER_GUESSED_WITHOUT_CHEATS, bullsAndCowsNumber.GuessesCount, attempt);
                                    string name = Console.ReadLine();
                                    scoreBoard.AddScore(name, bullsAndCowsNumber.GuessesCount);
                                }
                                else
                                {
                                    Console.WriteLine(NUMBER_GUESSED_WITH_CHEATS, bullsAndCowsNumber.GuessesCount, attempt,
                                                                                    bullsAndCowsNumber.CheatsCount, cheat);
                                }

                                Console.Write(scoreBoard);
                                Console.WriteLine();
                                Console.WriteLine(WELCOME_MESSAGE);

                                bullsAndCowsNumber = new SecretNumber();
                            }
                            else
                            {
                                Console.WriteLine("{0} {1}", WRONG_NUMBER_MESSAGE, guessResult);
                            }
                        }
                        catch (Exception ex)
                        {
                            //Modified by KrisNickson => this way it will catch all
                            //expcetions the new validation in CheckUserGuess throws
                            if (ex is ArgumentException || ex is FormatException)
                            {
                                Console.WriteLine(INVALID_COMMAND_MESSAGE);
                            }
                        }

                    break;
                }
            }

            scoreBoard.SaveToFile();
        }
        public void Test_CheckUserGuess_InputValidation_Under0()
        {
            SecretNumber secretNum = new SecretNumber();

            string invalidGuess = "-122";

            secretNum.CheckUserGuess(invalidGuess);
        }
        public void Test_CheckUserGuess_InputValidation_NullString()
        {
            SecretNumber secretNum = new SecretNumber();

            string invalidGuess = null;

            secretNum.CheckUserGuess(invalidGuess);
        }
        public void Test_CheckUserGuess_InputValidation_Over9999()
        {
            SecretNumber secretNum = new SecretNumber();

            string invalidGuess = "99999";

            secretNum.CheckUserGuess(invalidGuess);
        }
        public void Test_CheckUserGuess_CorrectGuess()
        {
            SecretNumber sNum = new SecretNumber();

            string guess = sNum.ToString();

            Result guessResult = sNum.CheckUserGuess(guess);

            Assert.AreEqual(4, guessResult.Bulls, "Wrong bullsCount count");
            Assert.AreEqual(0, guessResult.Cows, "Wrong cowsCount count");
        }