/// <summary>
        /// This method initialize the playfield and the strategy for popping the balloons and then
        /// initilize the game. After everything is ready starts the game life cycle.
        /// </summary>
        public void Start()
        {
            Playfield   gamePlayfield   = this.InitializePlayfield();
            PopStrategy gamePopStrategy = new RecursivePopStrategy();

            this.InitializeGame(gamePlayfield, gamePopStrategy);
            ConsoleIOFacade.PrintWelcomeMessage();
            ConsoleIOFacade.PrintTable(this.playfield);
            this.PlayGame();
        }
        /// <summary>
        /// This method runs the game life cycle, and waits for a user input on each loop. When the life cycle
        /// ends it adds the user to the score board and print the statistics.
        /// </summary>
        private void PlayGame()
        {
            while (!IsFinished)
            {
                this.userMoves++;

                string currentInput = ConsoleIOFacade.ReadInput();

                this.ProcessInput(currentInput);

                ConsoleIOFacade.PrintTable(this.playfield);
            }

            this.AddUserToScoreboard();

            string scoreboard = ConsoleIOFacade.CreateScoreboardString(this.statistics);

            Console.WriteLine(scoreboard);

            this.ProcessUserDescision();
        }