/// <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)); }
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) { }
/// <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)); }
/// <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) { }
/// <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; }