Search code examples
c#randomdice

Why does my randomizer show the same number when I run the program?


I'm new in C# and trying to make a dice game. I've made a do-while loop, and it works. My problem is I've made a randomizer with number, but once I throw the dice and it shows 5. It keeps showing 5, and not a new number. Kinda destroying the game.

Here's my code:

Ps. I'm Danish, that's why some of the words you may not understand. Hope you can help.

static void Main(string[] args) {

        int liv; ; // det er monsterets liv
        Random rnd = new Random();
        int dice = rnd.Next(1, 6); /*den vælger et random tal mellem 1 til 6*/

        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("velkommen til monster terning spil. du vinder spillet ved at dræbe monsteret");
        Console.WriteLine("indtast hvor mange liv monsteret skal have ");

        liv = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("du har givet monsteret {0} liv", liv);

        Console.Write("tryk på en knap for at komme videre");
        Console.ReadKey();//når du trykker på en knap kommer du videre
        Console.Clear();

        Console.WriteLine("slå med terningen tryk på en knap for");
            Console.ReadKey();

        do {
            if ((dice == 3) || (dice == 2)) { //hvis der bliver slået 3 eller 2 skal den gøre følgende
                Console.Clear();
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("du slog {0} monsteret slog tilbage", dice);
                Console.WriteLine("tryk på en knap for at slå med terningen igen");
                Console.ReadKey();
            }
            if (dice == 1) { //hvis der bliver slået 1 skal den gøre følgende
                Console.Clear();
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("du slog {0} monsteret giver dobbelt skade.", dice);
                Console.WriteLine("tryk på en tast for at slå med terningen igen");
                Console.ReadKey();
            }
            if ((dice == 4) || (dice == 5)) { //hvis der bliver slået 4 eller 5 skal den gøre følgende
                Console.Clear();
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("du slog {0} monsteret har taget 1 skade.", dice);
                Console.WriteLine("monsterets liv er nu {0}", --liv);
                Console.WriteLine("tryk på en tast for at slå med terningen igen");
                Console.ReadKey();
            }
            if (dice == 6) { //hvis der bliver slået 6 skal den gøre følgende
                Console.Clear();
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("du slog {0} dobbelt skade er givet. monsterets liv er nu {1}", dice, liv = -2);
                Console.WriteLine("tryk på en tast for at slå med terningen");
                Console.ReadKey();
            }
        }
        while (liv > 0); //jeg vil have spillet til at kører så længe liv er større end 0
                
        if (liv == 0) {
            Console.Clear();
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("du vandt! monsteret er dræbt!!");
        }

Solution

  • Like @Charlieface wrote in his comment, you set the dice only at the beginning of your program.

    The solutions for your problem is to set it again with the Random object:

    do {
            dice = rnd.Next(1, 6);
            if ((dice == 3) || (dice == 2)) {
    
            ....
        }
        while (liv > 0);