/// <summary>
        /// A class that checks for unpopped baloons and adds then to a stack.
        /// If there are unpopped baloons their positions are reset. If all baloons are 
        /// popped, red baloons are created in the emprty space.
        /// </summary>
        /// <param name="board">This method accepts a new instance of the Gameboard.</param>
        public override void Apply(Gameboard board)
        {
            for (int col = 0; col < board.BoardWidth; col++)
            {
                Stack<BoardComponent> columnContents = new Stack<BoardComponent>();

                for (int row = 0; row < board.BoardHeight; row++)
                {
                    var currentComponent = board.GetElement(row, col);

                    if (currentComponent.IsActive)
                    {
                        columnContents.Push(currentComponent);
                    }
                }

                for (int row = board.BoardHeight - 1; row >= 0; row--)
                {
                    if (columnContents.Count > 0)
                    {
                        board.SetElement(row, col, columnContents.Pop());
                    }
                    else
                    {
                        BalloonMaker balloonMaker = new BalloonMaker();
                        BoardComponent poppedBalloon = balloonMaker.MakeBalloon(BaloonColor.Red);
                        poppedBalloon.IsActive = false;

                        board.SetElement(row, col, poppedBalloon);
                    }
                }
            }
        }
        /// <summary>
        /// This Method fills the board with balloons of random color.
        /// </summary>
        public void GetBalloonsOnBoard()
        {
            Random randomGenerator = new Random();

            for (int i = 0; i < this.BoardHeight; i++)
            {
                for (int j = 0; j < this.BoardWidth; j++)
                {
                    int seed = randomGenerator.Next(0, 4);
                    var balloonFactory = new BalloonMaker();

                    switch (seed)
                    {
                        case 0:
                            this.contents[i, j] = balloonFactory.MakeBalloon(BaloonColor.Red);
                            continue;
                        case 1:
                            this.contents[i, j] = balloonFactory.MakeBalloon(BaloonColor.Blue);
                            continue;
                        case 2:
                            this.contents[i, j] = balloonFactory.MakeBalloon(BaloonColor.Green);
                            continue;
                        case 3:
                            this.contents[i, j] = balloonFactory.MakeBalloon(BaloonColor.Yellow);
                            continue;
                        default:
                            throw new ArgumentException();
                    }
                }
            }
        }