private static void PrintFrame(Ball ball, Board board)
        {
            int currBallRow = ball.Row;
            int currBallCol = ball.Col;
            int currBoardRow = board.Row;
            matrixForGame[currBallRow, currBallCol] = ball;
            for (int i = 0; i < board.Size; i++)
            {
                matrixForGame[board.Row, board.Col + i] = board;
            }
            for (int rows = 0; rows < matrixForGame.GetLength(0); rows++)
            {
                for (int cols = 0; cols < matrixForGame.GetLength(1); cols++)
                {
                    Console.Write("  {0}  ", matrixForGame[rows, cols].GetCharOfObject());
                }
                Console.WriteLine();
            }
            Console.WriteLine(new string('-', matrixForGame.GetLength(0)*5));
            Console.WriteLine("    {0," + ((Console.WindowWidth / 2)) + "}", "Hello " + user + ", Good Luck! :)");

            Console.WriteLine(@"                  _________________________
                 //                       \\
                //       Lives = {1}         \\
               //                           \\
              //         Score = {0:000}         \\
             //_______________________________\\ ", score, lives);
            for (int i = 0; i < board.Size; i++)
            {
                matrixForGame[board.Row, board.Col + i] = new EmptyBlock();
            }
            matrixForGame[ball.Row, ball.Col] = new EmptyBlock();
        }
        private static void Update(Ball ball, Board board)
        {
            ball.Col += ball.UpdateCol;
            ball.Row += ball.UpdateRow;

            //Colliding with left or right wall
            #region
            if (ball.Col >= matrixForGame.GetLength(1) - 1 || ball.Col <= 0)
            {
                ball.UpdateCol *= (-1);
                ball.Col += ball.UpdateCol;

            }
            #endregion
            //Colliding with ceiling
            #region
            if (ball.Row < 1)
            {
                ball.UpdateRow *= -1;
                ball.Row += ball.UpdateRow;

            }
            #endregion
            //Colliding with bricks
            #region
            if (matrixForGame[ball.Row, ball.Col].IsDestroyable)
            {
                //TO DO.. Implement Destroy
                if (matrixForGame[ball.Row, ball.Col] is Brick)
                {
                    //Console.Beep(3000,200);
                    score += 5;
                }
                if (matrixForGame[ball.Row, ball.Col] is SpecialBonusBrick)
                {
                    //Console.Beep(3000, 300);
                    score += 10;
                }
                matrixForGame[ball.Row, ball.Col] = new EmptyBlock();
                ball.UpdateRow *= -1;
                ball.Row += ball.UpdateRow;
                return;
            }
            #endregion
            //Colliding with board
            #region
            if (ball.Row >= board.Row && (ball.Col >= board.Col && ball.Col <= board.Col + board.Size))
            {
                ball.UpdateRow *= -1;
                ball.Row += ball.UpdateRow;
                ballBoardHits++;
            }
            #endregion
            if (ball.Row >= matrixForGame.GetLength(0) - 1)
            {
                lives--;
                // Console.Beep(658, 1250);

                ball.Row = matrixForGame.GetLength(0) - 1;
                ball.Col = matrixForGame.GetLength(1) / 2;
                ball.UpdateRow = -1;
                ball.UpdateCol = -1;
                board.Col = matrixForGame.GetLength(1) / 2 - board.Size / 2;
                Console.Clear();
                Thread.Sleep(1000);
            }
        }
        private static void PlayGame(int level)
        {
            //The method returns the score
            matrixForGame = LoadLevel(level);
            Ball ball = new Ball(matrixForGame.GetLength(0) - 1, matrixForGame.GetLength(1) / 2);
            int boardRow = matrixForGame.GetLength(0) - 1;
            int boardCol = matrixForGame.GetLength(1) / 2;
            bool allBricksCleared = false;
            Board board = new Board(boardRow, boardCol);
            while (true)
            {
                if (ballBoardHits >= MAX_BALL_BOARD_HITS_BEFORE_BRICKS_DOWN)
                {
                    for (int row = matrixForGame.GetLength(0) - 1; row > 1; row--)
                    {
                        for (int col = 1; col < matrixForGame.GetLength(1) - 1; col++)
                        {
                            matrixForGame[row, col] = matrixForGame[row - 1, col];
                        }
                    }
                    ballBoardHits = 0;
                }
                if (lives < 1)
                {
                    //Read all the users
                    List<User> users = new List<User>();
                    users.Add(new User(user, score));
                    using (StreamReader scoreReader = new StreamReader(@"..\..\HighScore.txt"))
                    {
                        string lineRead = scoreReader.ReadLine();
                        while (!string.IsNullOrEmpty(lineRead))
                        {
                            users.Add(User.ParseUser(lineRead));
                            lineRead = scoreReader.ReadLine();
                        }
                    }
                    //Write the current user
                    using (StreamWriter sr = new StreamWriter(@"..\..\HighScore.txt"))
                    {
                        foreach (var userToWrite in users)
                        {
                            sr.WriteLine(userToWrite.ToString());
                        }
                    }
                    users.Clear();

                    lives = 3;
                    score = 0;
                    break;

                }
                Console.Clear();
                PrintFrame(ball, board);
                Update(ball, board);
                if (Console.KeyAvailable)
                {
                    ConsoleKeyInfo key = Console.ReadKey();
                    switch (key.Key)
                    {

                        case ConsoleKey.LeftArrow:
                            if (board.Col >= 2)
                            {
                                board.Col--;
                            }
                            break;
                        case ConsoleKey.RightArrow:
                            if (board.Col + board.Size < matrixForGame.GetLength(1) - 1)
                            {
                                board.Col++;
                            }
                            break;

                        case ConsoleKey.P:
                            {
                                while (true)
                                {
                                ConsoleKeyInfo isPause = Console.ReadKey(true);
                                    if (isPause.Key == ConsoleKey.P)
                                    {
                                        break;
                                    }
                                    Console.ReadKey(true);
                                }
                            }
                            break;

                        case ConsoleKey.Escape:
                            {
                                Console.Clear();
                                DrawMenu();
                            }
                            break;
                    }
                }

                allBricksCleared = true;
                for (int row = 0; row < matrixForGame.GetLength(0); row++)
                {
                    for (int col = 0; col < matrixForGame.GetLength(1); col++)
                    {
                        if (matrixForGame[row, col].IsDestroyable)
                        {
                            allBricksCleared = false;
                            break;
                        }
                    }
                }
                if (allBricksCleared)
                {
                    break;
                }
                Thread.Sleep(150);
            }
            if (allBricksCleared)
            {
                PlayGame(level + 1);
            }
            else
            {
                AskRetry();
            }
        }