Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
4.4 kB
3
Indexable
Never

namespace LaborationCC.Classes
{
    internal class MainGame : IGame
    {
        private readonly IGoalGeneratorFactory goalGeneratorFactory;
        private readonly IGuessCheckerFactory guessCheckerFactory;
        private readonly IPlayerDataStorage playerDataStorage;
        private readonly IIO _io;
        private readonly Action userInputHandler;

        public MainGame(IGoalGeneratorFactory generatorFactory, IGuessCheckerFactory checkerFactory, IPlayerDataStorage storage, IIO io)
        {
            goalGeneratorFactory = generatorFactory;
            guessCheckerFactory = checkerFactory;
            playerDataStorage = storage;
            _io = io;

            userInputHandler = HandleUserInput;
        }

        public void Play()
        {
            _io.WriteLine("Welcome to the Number Guessing Game!");
            _io.WriteLine("=====================================\n");

            bool playOn = true;
            while (playOn)
            {
                HandleUserInput();
                PlayGame();

                int numberOfGuess = 1;

                _io.WriteLine("Correct, it took " + numberOfGuess + " guesses.\nContinue?\n \"n\" for no or just press any key to continue");  //Den här används tydligen inte överhuvutaget
                string answer = _io.ReadLine();
                if (answer != null && answer != "" && answer.Substring(0, 1) == "n")
                {
                    playOn = false;
                }
            }
        }

        private void PlayGame()
        {
            _io.WriteLine("Enter your username:\n");
            string name = _io.ReadLine();

            IGoalGenerator goalGenerator = goalGeneratorFactory.CreateGoalGenerator();
            IGuessChecker guessChecker = guessCheckerFactory.CreateGuessChecker();
            string goal = goalGenerator.Generate();

            _io.WriteLine("New game:\n");
            // Comment out or remove the next line to play real games!
            _io.WriteLine("For practice, the number is: " + goal + "\n");
            string guess = _io.ReadLine();

            int nGuess = 1;
            string bbcc = guessChecker.Check(goal, guess);
            _io.WriteLine(bbcc + "\n");
            while (bbcc != "BBBB,")
            {
                nGuess++;
                guess = _io.ReadLine();
                _io.WriteLine(guess + "\n");
                bbcc = guessChecker.Check(goal, guess);
                _io.WriteLine(bbcc + "\n");
            }

            playerDataStorage.Write(name, nGuess);
            playerDataStorage.ShowTopList();
        }

        private void HandleUserInput()
        {
            while (true)
            {
                _io.WriteLine("Select an option:");
                _io.WriteLine("1. Play");
                _io.WriteLine("2. Clear Player Data");
                _io.WriteLine("3. Exit");

                string choice = _io.ReadLine();

                switch (choice)
                {
                    case "1":
                        PlayGame();
                        break;
                    case "2":
                        playerDataStorage.ClearData();
                        _io.WriteLine("Player data cleared.");
                        break;
                    case "3":
                        _io.WriteLine("Exiting the game...");
                        _io.Exit();
                        break;
                    default:
                        _io.WriteLine("Invalid option. Please try again.");
                        break;


                }


            }
            

        }

        //private int GetUserInput()   //Vi skulle använda den här istället för HandleUserInput
        //{
        //    while (true)
        //    {
        //        _io.WriteLine("Select an option:");
        //        _io.WriteLine("1. Play");
        //        _io.WriteLine("2. Clear Player Data");
        //        _io.WriteLine("3. Exit");

        //        string input = _io.ReadLine();
        //        int choice = int.Parse(input);

        //        if (choice >= 1 && 3 >= choice)
        //        {
        //            return choice;
        //        }
        //        _io.WriteLine("Invalid choice");
        //    }
        //}
    }
}