Simple Math Quiz Game I have been studying C# for 2 weeks already, I wrote a simple math game but not quite sure how bad it is. I'm just teaching myself to code through internet references. If you could review my work, I would appreciate it.


It is a simple math quiz game
player gets 1 point in every correct answer
the game will be over when the player gives the incorrect answer
it displays total score the player earned, then the score resets.
Is my program reasonable or is there anything i need to improve?




    static void Main(string[] args)
    {
        Console.Write("Please enter your Name: ");
        string userName = (Console.ReadLine());

        Console.WriteLine("Hello " + userName + ", Press ENTER to start the Math Quiz");

        Console.WriteLine();
        Console.ReadKey();

        Start:

        Random numberGenerator = new Random();
        int score = 0;

        while (true)
        {
            int num01 = numberGenerator.Next(1, 11);
            int num02 = numberGenerator.Next(1, 11);

            Console.WriteLine("What is " + num01 + " times " + num02 + " equal to?");

            int Answer = Convert.ToInt32(Console.ReadLine());
            int correctAnswer = num01 * num02;

            if (Answer == num01 * num02)
            {
                Console.ForegroundColor = ConsoleColor.Green;
                ++score;
                int responseIndex = numberGenerator.Next(1, 5);  
                switch (responseIndex)
                {
                    case 1:
                        Console.WriteLine("Great!");                      
                        Console.WriteLine("Your score: " + score);
                        break;
                    case 2:
                        Console.WriteLine("You nailed it!");
                        Console.WriteLine("Your score: " + score);
                        break;
                    case 3:
                        Console.WriteLine("You're correct!");
                        Console.WriteLine("Your score: " + score);
                        break;
                    default:
                        Console.WriteLine("Good Job " + userName + ", Keep it up!");
                        Console.WriteLine("Your score: " + score);
                        break;
                }
                Console.ResetColor();
                Console.ReadLine();
                Console.WriteLine();               
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;
                int responseIndex2 = numberGenerator.Next(1, 5);
                switch (responseIndex2)
                {
                    case 1:
                        Console.WriteLine("Are you even trying? The correct answer is " + correctAnswer);
                        break;
                    case 2:
                        Console.WriteLine("Ooops!!! The correct answer is " + correctAnswer);
                        break;
                    case 3:
                        Console.WriteLine("Oh, come on " + userName + " I know you can do better than that! The correct answer is " + correctAnswer);
                        break;
                    default:
                        Console.WriteLine("Sorry " + userName + ", that's incorrect, the correct answer is " + correctAnswer);
                        break;
                }
                Console.WriteLine(Environment.NewLine + "Game Over, Your score: " + score);
                Console.ResetColor();
                Console.WriteLine();
                Console.ReadLine();
                goto Start;
            }
        }
    }
Even though this is a fairly short program, resist the temptation to do everything in the Program class of your console app. Whenever I start a new console app, the first thing I do is create a Runner class with an Execute() method and call that from the Main() of Program.



Using goto is IMHO incredibly rare in a C#/.NET program. Make this code block a method and call it.



Whenever you start copy-pasting code, it's a sign you're doing something wrong.

switch (responseIndex)
{
    case 1:
        Console.WriteLine("Great!");
        Console.WriteLine("Your score: " + score);
        break;
    case 2:
        Console.WriteLine("You nailed it!");
        Console.WriteLine("Your score: " + score);
        break;
    case 3:
        Console.WriteLine("You're correct!");
        Console.WriteLine("Your score: " + score);
        break;
    default:
        Console.WriteLine("Good Job " + userName + ", Keep it up!");
        Console.WriteLine("Your score: " + score);
        break;
}


Clearly Console.WriteLine("Your score: " + score); should be in a method of its own, and the other line you be as well, with its message the parameter for that method, e.g.

private void ReportResult(string message, int score)
{
    Console.WriteLine(message);
    Console.WriteLine("Your score: " + score);
}


You could even write the second line as Console.WriteLine("Your score: {0}", score); or Console.WriteLine($"Your score: {score}");. While a small amount of string concatenation isn't a performance killer, newer versions of C# offer nicer and more readable ways to format strings.



int Answer: "Answer" should be camelCase.



Considering that you calculate int correctAnswer = num01 * num02;, why then do you do if (Answer == num01 * num02) next? Use correctAnswer.



Even though the current code is fairly short, I'd still move the code in the if and the code in the else block to a method of their own (e.g. "ReportSuccess" and "ReportFailure"). This will make your code easier to follow and splits up the logic into smaller chunks.