C# Dice Program Help!!!

Discussion in 'C#' started by hanleyhansen, Feb 12, 2008.

  1. hanleyhansen

    hanleyhansen New Member

    Joined:
    Jan 24, 2008
    Messages:
    336
    Likes Received:
    8
    Trophy Points:
    0
    Occupation:
    Drupal Developer/LAMP Developer
    Location:
    Clifton
    Home Page:
    http://www.hanseninfotech.com
    I am working on this book that is teaching me C#. I need help with one of the challenges. This is what I have to do: Write a program that simulates a “loaded” die that comes up with the value 1 for half the time and some other random value the other half of the time. All I want is a few hints to get me started.
     
  2. cadwtr

    cadwtr New Member

    Joined:
    Mar 20, 2008
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    I'm not sure if this is the simplist way but could make an array with ten members. The first five would be '1', and the rest 2-5. Then run a randomizer to pick an array at random. Maybe something like:

    public Random DiceRoller;
    string Dice[] = { "1","1","1","1","1","2","3","4","5","6"}
    public string RollDice();
    {
    string DiceValue = Dice[DiceRoller.Next(Dice.Length)];
    retrun DiceValue
    }

    Not sure if this is what you were looking for or if it helps.
     
  3. hanleyhansen

    hanleyhansen New Member

    Joined:
    Jan 24, 2008
    Messages:
    336
    Likes Received:
    8
    Trophy Points:
    0
    Occupation:
    Drupal Developer/LAMP Developer
    Location:
    Clifton
    Home Page:
    http://www.hanseninfotech.com
    Thanks i'll try that when I get home.
     
  4. hanleyhansen

    hanleyhansen New Member

    Joined:
    Jan 24, 2008
    Messages:
    336
    Likes Received:
    8
    Trophy Points:
    0
    Occupation:
    Drupal Developer/LAMP Developer
    Location:
    Clifton
    Home Page:
    http://www.hanseninfotech.com
    I found a better way but thanks for your help. What I did was influence the array for the random instead because you can manipulate it much better. Your idea works but I find this one to be more elegant and easier to read. Thank you anyway.
     
  5. Dormidont

    Dormidont New Member

    Joined:
    Jan 15, 2011
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    Code:
    //Write a program that simulates a "loaded" die that comes up with the value 1 for half the time
    //and some other random value the other half the time.
    
    //This is an exercise from Chapter 2 of book "Microsoft C# programming for the absolute beginner".
    //This example is in no way the most elegant solution. It was written strictly for illustrative 
    //purpose.
    using System;
    
    namespace LoadedDieProblemChapter2
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Rolling the loaded die:");
                LoadedDie loaded = new LoadedDie();
                Console.WriteLine(loaded);
                Console.WriteLine("\nRolling the normal die:");
                NormalDie normal = new NormalDie();
                Console.WriteLine(normal);
                Console.WriteLine("\nConclusion: try not to play against somebody with a loaded die");
    
            }
        }
        class LoadedDie
        {
            //Some field data to see how many ones....sixes we get out of a thousand die rolls
            public int ones;
            public int twos;
            public int threes;
            public int fours;
            public int fives;
            public int sixes;
            public int[] dies; //keep the results of die rolls
    
            public LoadedDie()
            {
                Random r = new Random(); //get Random object
                double raw; //will hold the result of r.NextDouble()
                int die; //will hold the casted raw
                dies = new int[1000];
                for (int i = 0; i < 1000; i++) //roll the die 1000 times
                {
                    raw = r.NextDouble(); //get a value in the range [0.0:1.0]
                    if (raw <= 0.5) //here is the "loaded" logic. In english: load the die to return a given value approximately half of the time
                    {
                        dies[i] = die = 1; //the "loaded" value
                        ones++; //increase the ones count
                    }
                    else //what to do with the rest half of the time
                    {
                        raw = r.NextDouble(); //regenerate random number. If we would use the previous value of raw, we would lose some values
                        die = (int)(raw * 6) + 1; //cast the raw to a value in the range [1:6]
                        dies[i] = die; //store the result
                        switch (die) //see what value die roll returned, adjust corresponding field
                        {
                            case 1: ones++; break;
                            case 2: twos++; break;
                            case 3: threes++; break;
                            case 4: fours++; break;
                            case 5: fives++; break;
                            case 6: sixes++; break;
                        }
                    }
                }
            }
    
            public override string ToString() //override ToString() to make it easy to see the results of the 1000 rolls
            {
                return string.Format("There were {0} rolls\n1's: {1}\n2's: {2}\n3's: {3}\n4's: {4}\n5's: {5}\n6's: {6}",
                    dies.Length, ones, twos, threes, fours, fives, sixes);
            }
        }
    
        class NormalDie
        {
            public int ones;
            public int twos;
            public int threes;
            public int fours;
            public int fives;
            public int sixes;
            public int[] dies;
    
            public NormalDie()
            {
                Random r = new Random();
                double raw;
                int die;
                dies = new int[1000];
                for (int i = 0; i < 1000; i++)
                {
                    raw = r.NextDouble();
                    die = (int)(raw * 6) + 1;
                    dies[i] = die;
                    switch (die)
                    {
                        case 1: ones++; break;
                        case 2: twos++; break;
                        case 3: threes++; break;
                        case 4: fours++; break;
                        case 5: fives++; break;
                        case 6: sixes++; break;
                    }
                }
            }
    
            public override string ToString()
            {
                return string.Format("There were {0} rolls\n1's: {1}\n2's: {2}\n3's: {3}\n4's: {4}\n5's: {5}\n6's: {6}",
                    dies.Length, ones, twos, threes, fours, fives, sixes);
            }
        }
    }
     
    Last edited by a moderator: Jan 16, 2011

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice