Tech Off Post

Single Post Permalink

View Thread: C# dice Roller
  • User profile image
    jj5

    St23aM wrote:
    You said "on each loop add the current roll to the end of the string, and then tack the total on after the loop exits" This is exactly what im trying to figure out how to do. Could you make a suggestion in code?


    This is pretty much what the code I posted does. I guess I should have commented it for you..

    This time with comments.

    John.

      using System;
      using System.Text;

      public class EntryPoint {

        [STAThread]
        public static void Main(string[] args) {

          // roll two die with 6 faces
          Console.WriteLine(Dice.Roll(2, 6));

          // roll 4 die with 8 faces
          Console.WriteLine(Dice.Roll(4,Eye Rolling);

          Console.Write("Press ENTER to exit.");
          Console.ReadLine();

        }
      }

      public class Dice {

        /// <summary>
        /// Rolls the specified number of die each with the specified number of
        /// sides and returns the result as a string, including the total.
        /// </summary>
        /// <param name="numberOfDice">The number of die to roll.</param>
        /// <param name="numberOfSides">The number of faces on each dice rolled.</param>
        /// <returns>A string containing the result of the roll.</returns>
        public static String Roll(Int32 numberOfDice, Int32 numberOfSides) {

          // don't allow a Number of Dice less than or equal to zero
          if (numberOfDice <= 0) {
            throw new ApplicationException("Number of die must be greater than zero.");
          }

          // don't allow a Number of Sides less than or equal to zero
          if (numberOfSides <= 0) {
            throw new ApplicationException("Number of sides must be greater than zero.");
          }

          // Create the random class used to generate random numbers.
          // See: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemRandomClassTopic.asp
          Random rnd = new Random((Int32)DateTime.Now.Ticks);

          // Create the string builder class used to build the string
          // we return with the result of the die rolls.
          // See: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemtextstringbuilderclasstopic.asp
          StringBuilder result = new StringBuilder();

          // Declare the integer in which we will keep the total of the rolls
          Int32 total = 0;

          // repeat once for each number of dice
          for (Int32 i = 0; i < numberOfDice; i++) {

            // Get a pseudo-random result for this roll
            Int32 roll = rnd.Next(1, numberOfSides);

            // Add the result of this roll to the total
            total += roll;

            // Add the result of this roll to the string builder
            result.AppendFormat("Dice {0:00}:\t{1}\n", i + 1, roll);

          }

          // Add a line to the result to seperate the rolls from the total
          result.Append("\t\t--\n");

          // Add the total to the result
          result.AppendFormat("TOTAL:\t\t{0}\n", total);

          // Now that we've finished building the result, get the string
          // that we've been building and return it.
          return result.ToString();

        }
      }