/// <summary>
        /// Gets the die roller based on specified type.
        /// </summary>
        /// <param name="type">Type string</param>
        /// <param name="tracker">Die roll tracker to use</param>
        /// <returns>Instance of die roller, or null if none found.</returns>
        public IDieRoller GetDieRoller(string type, IDieRollTracker tracker = null)
        {
            IDieRoller roller = null;

            if (type == typeof(ConstantDieRoller).ToString())
            {
                roller = new ConstantDieRoller();
            }
            else if (type == typeof(RandomDieRoller).ToString())
            {
                roller = new RandomDieRoller(tracker);
            }
            else if (type == typeof(SecureRandomDieRoller).ToString())
            {
                roller = new SecureRandomDieRoller(tracker);
            }
            else if (type == typeof(MathNetDieRoller).ToString())
            {
                roller = new MathNetDieRoller(tracker);
            }
            else
            {
                throw new ArgumentOutOfRangeException(nameof(type));
            }

            return(roller);
        }
 private void SetupTrackingSampleData(IDieRollTracker tracker)
 {
     tracker.AddDieRoll(6, 4, typeof(RandomDieRoller));
     tracker.AddDieRoll(6, 3, typeof(RandomDieRoller));
     tracker.AddDieRoll(6, 1, typeof(RandomDieRoller));
     tracker.AddDieRoll(6, 6, typeof(RandomDieRoller));
     tracker.AddDieRoll(8, 2, typeof(ConstantDieRoller));
     tracker.AddDieRoll(8, 4, typeof(ConstantDieRoller));
     tracker.AddDieRoll(10, 2, typeof(ConstantDieRoller));
     tracker.AddDieRoll(10, 8, typeof(ConstantDieRoller));
     tracker.AddDieRoll(10, 9, typeof(ConstantDieRoller));
     tracker.AddDieRoll(10, 4, typeof(RandomDieRoller));
     tracker.AddDieRoll(20, 5, typeof(ConstantDieRoller));
     tracker.AddDieRoll(20, 18, typeof(ConstantDieRoller));
     tracker.AddDieRoll(20, 11, typeof(ConstantDieRoller));
     tracker.AddDieRoll(20, 5, typeof(RandomDieRoller));
     tracker.AddDieRoll(20, 5, typeof(RandomDieRoller));
     tracker.AddDieRoll(20, 17, typeof(RandomDieRoller));
     tracker.AddDieRoll(20, 9, typeof(RandomDieRoller));
     tracker.AddDieRoll(20, 12, typeof(RandomDieRoller));
     tracker.AddDieRoll(20, 20, typeof(RandomDieRoller));
     tracker.AddDieRoll(20, 8, typeof(RandomDieRoller));
     tracker.AddDieRoll(20, 11, typeof(RandomDieRoller));
     tracker.AddDieRoll(20, 9, typeof(RandomDieRoller));
     tracker.AddDieRoll(20, 12, typeof(RandomDieRoller));
     tracker.AddDieRoll(20, 20, typeof(RandomDieRoller));
     tracker.AddDieRoll(20, 14, typeof(RandomDieRoller));
     tracker.AddDieRoll(20, 13, typeof(RandomDieRoller));
     tracker.AddDieRoll(20, 9, typeof(RandomDieRoller));
 }
Ejemplo n.º 3
0
        public void Configure(RollerType rollerType, bool enableTracker = false, int constantValue = 1)
        {
            RollTracker = enableTracker ? new DieRollTracker() : null;

            switch (rollerType)
            {
            case RollerType.Random:
                DieRoller = new RandomDieRoller(RollTracker);
                break;

            case RollerType.Crypto:
                DieRoller = new CryptoDieRoller(RollTracker);
                break;

            case RollerType.MathNet:
                DieRoller = new MathNetDieRoller(RollTracker);
                break;

            case RollerType.Constant:
                DieRoller = new ConstantDieRoller(constantValue);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(rollerType));
            }
        }
        private List <AggregateDieTrackingData> SetupStatisticalTrackingData(IDieRollTracker tracker)
        {
            this.SetupTrackingSampleData(tracker);

            tracker.AddDieRoll(20, 5, typeof(ConstantDieRoller));
            tracker.AddDieRoll(20, 18, typeof(ConstantDieRoller));
            tracker.AddDieRoll(20, 11, typeof(ConstantDieRoller));
            tracker.AddDieRoll(20, 5, typeof(RandomDieRoller));
            tracker.AddDieRoll(20, 5, typeof(RandomDieRoller));
            tracker.AddDieRoll(20, 17, typeof(RandomDieRoller));
            tracker.AddDieRoll(20, 9, typeof(RandomDieRoller));
            tracker.AddDieRoll(20, 12, typeof(RandomDieRoller));
            tracker.AddDieRoll(20, 20, typeof(RandomDieRoller));
            tracker.AddDieRoll(20, 8, typeof(RandomDieRoller));
            tracker.AddDieRoll(20, 11, typeof(RandomDieRoller));
            tracker.AddDieRoll(20, 9, typeof(RandomDieRoller));
            tracker.AddDieRoll(20, 10, typeof(RandomDieRoller));
            tracker.AddDieRoll(20, 12, typeof(RandomDieRoller));
            tracker.AddDieRoll(20, 20, typeof(RandomDieRoller));
            tracker.AddDieRoll(20, 14, typeof(RandomDieRoller));
            tracker.AddDieRoll(20, 13, typeof(RandomDieRoller));
            tracker.AddDieRoll(20, 9, typeof(RandomDieRoller));

            List <AggregateDieTrackingData> expectedAggegate = new List <AggregateDieTrackingData>();

            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "ConstantDieRoller", DieSides = "10", Result = 2, Count = 1, Percentage = 33.3f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "ConstantDieRoller", DieSides = "10", Result = 8, Count = 1, Percentage = 33.3f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "ConstantDieRoller", DieSides = "10", Result = 9, Count = 1, Percentage = 33.3f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "ConstantDieRoller", DieSides = "20", Result = 5, Count = 2, Percentage = 33.3f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "ConstantDieRoller", DieSides = "20", Result = 11, Count = 2, Percentage = 33.3f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "ConstantDieRoller", DieSides = "20", Result = 18, Count = 2, Percentage = 33.3f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "ConstantDieRoller", DieSides = "8", Result = 2, Count = 1, Percentage = 50.0f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "ConstantDieRoller", DieSides = "8", Result = 4, Count = 1, Percentage = 50.0f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "RandomDieRoller", DieSides = "10", Result = 4, Count = 1, Percentage = 100.0f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "RandomDieRoller", DieSides = "20", Result = 5, Count = 4, Percentage = 13.8f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "RandomDieRoller", DieSides = "20", Result = 8, Count = 2, Percentage = 6.9f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "RandomDieRoller", DieSides = "20", Result = 9, Count = 6, Percentage = 20.7f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "RandomDieRoller", DieSides = "20", Result = 10, Count = 1, Percentage = 3.4f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "RandomDieRoller", DieSides = "20", Result = 11, Count = 2, Percentage = 6.9f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "RandomDieRoller", DieSides = "20", Result = 12, Count = 4, Percentage = 13.8f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "RandomDieRoller", DieSides = "20", Result = 13, Count = 2, Percentage = 6.9f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "RandomDieRoller", DieSides = "20", Result = 14, Count = 2, Percentage = 6.9f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "RandomDieRoller", DieSides = "20", Result = 17, Count = 2, Percentage = 6.9f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "RandomDieRoller", DieSides = "20", Result = 20, Count = 4, Percentage = 13.8f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "RandomDieRoller", DieSides = "6", Result = 1, Count = 1, Percentage = 25.0f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "RandomDieRoller", DieSides = "6", Result = 3, Count = 1, Percentage = 25.0f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "RandomDieRoller", DieSides = "6", Result = 4, Count = 1, Percentage = 25.0f
            });
            expectedAggegate.Add(new AggregateDieTrackingData {
                RollerType = "RandomDieRoller", DieSides = "6", Result = 6, Count = 1, Percentage = 25.0f
            });

            return(expectedAggegate);

            /* Expected aggregate data view
             *  ConstantDieRoller	10	2	1
             *  ConstantDieRoller	10	8	1
             *  ConstantDieRoller	10	9	1
             *  ConstantDieRoller	20	5	2
             *  ConstantDieRoller	20	11	2
             *  ConstantDieRoller	20	18	2
             *  ConstantDieRoller	8	2	1
             *  ConstantDieRoller	8	4	1
             *  RandomDieRoller	    10	4	1
             *  RandomDieRoller	    20	5	4
             *  RandomDieRoller	    20	8	2
             *  RandomDieRoller	    20	9	6
             *  RandomDieRoller	    20	10	1
             *  RandomDieRoller	    20	11	2
             *  RandomDieRoller	    20	12	4
             *  RandomDieRoller	    20	13	2
             *  RandomDieRoller	    20	14	2
             *  RandomDieRoller	    20	17	2
             *  RandomDieRoller	    20	20	4
             *  RandomDieRoller	    6	1	1
             *  RandomDieRoller	    6	3	1
             *  RandomDieRoller	    6	4	1
             *  RandomDieRoller	    6	6	1
             */
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="RandomDieRoller"/> class.
 /// </summary>
 /// <param name="random">Random number generator to use</param>
 /// <param name="tracker">Tracking service to remember die rolls</param>
 public RandomDieRoller(Random random, IDieRollTracker tracker)
     : base(tracker)
 {
     this.random = random;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="RandomDieRoller"/> class.
 /// Uses the default static random number generator.
 /// </summary>
 /// <param name="tracker">Tracking service to remember die rolls</param>
 public RandomDieRoller(IDieRollTracker tracker = null)
     : this(DefaultRandomGenerator, tracker)
 {
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="SecureRandomDieRoller"/> class.
 /// </summary>
 /// <param name="tracker">Die roll tracker to use; default to no tracker</param>
 public SecureRandomDieRoller(IDieRollTracker tracker = null)
     : base(tracker)
 {
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MathNetDieRoller"/> class.
 /// </summary>
 /// <param name="source">Random source to use</param>
 /// <param name="tracker">Die roll tracker to use; null means don't track roll data</param>
 public MathNetDieRoller(RandomSource source, IDieRollTracker tracker = null)
     : base(tracker)
 {
     randomSource = source ?? throw new ArgumentNullException(nameof(source));
 }
Ejemplo n.º 9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MathNetDieRoller"/> class.
 /// </summary>
 /// <param name="tracker">Die roll tracker to use; null means don't track roll data</param>
 public MathNetDieRoller(IDieRollTracker tracker = null)
     : this(new MersenneTwister(), tracker)
 {
 }
Ejemplo n.º 10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RandomDieRollerBase"/> class.
 /// Uses the default static random number generator.
 /// </summary>
 /// <param name="tracker">Tracking service to remember die rolls</param>
 public RandomDieRollerBase(IDieRollTracker tracker = null)
 {
     this.tracker = tracker;
 }