private IEnumerable <BaseUser> CreateBaseUsers(BaseUserOptions options, Func <int, int?, BaseUser> creator) { var users = new BaseUser[options.Count]; for (var i = 0; i < options.Count; i++) { var availableAttempts = _random.Next(options.AttemptsMin, options.AttemptsMax + 1); var preset = options.PresetMin.HasValue && options.PresetMax.HasValue ? _random.Next(options.PresetMin.Value, options.PresetMax.Value + 1) : default(int?); users[i] = creator(availableAttempts, preset); } return(users); }
private IEnumerable <BaseUser> CreateStopBeforeGuarantUsers(StopBeforeGuarantUserOptions options) { var users = new BaseUser[options.Count]; for (var i = 0; i < options.Count; i++) { var availableAttempts = _random.Next(options.AttemptsMin, options.AttemptsMax + 1); var preset = options.PresetMin.HasValue && options.PresetMax.HasValue ? _random.Next(options.PresetMin.Value, options.PresetMax.Value + 1) : default(int?); users[i] = new StopBeforeGuarantUser(availableAttempts, _random.Next(options.StopIndexMin, options.StopIndexMax + 1), preset); } return(users); }
private void RunUser(BaseUser user) { var random = new Random(); Win?action() { (var win, var index) = _luckCalculationService.DiceRoll(user, random); if (win.HasValue) { _statisticsService.Reg(win.Value, index); } return(win); } user.Play(action); }
public (Win?win, int index) DiceRoll(BaseUser user, Random random) { var win = chances[random.Next(totalNext)]; foreach (var key in guarants.Keys) { var value = ++user.LastWin[key]; if (guarants[key] <= value && win != Win.FiveStart) { win = key; } } var index = 0; if (win.HasValue) { index = user.LastWin[win.Value]; user.LastWin[win.Value] = 0; } return(win, index); }