Как генерировать новую последовательность случайных чисел каждый день? - PullRequest
0 голосов
/ 04 апреля 2019

Я делаю ежедневные испытания в игре.Каждый день должен быть новым испытанием.Мое процедурное поколение использует генератор случайных чисел .Попытка ежедневного вызова дважды (или два разных пользователя, пытающихся его выполнить) должна иметь одинаковые результаты (одинаковую последовательность случайных чисел).

Я хочу:

  • создать последовательность случайныхчисла.
  • последовательность должна быть одинаковой каждый раз, когда я начинаю генерировать в один и тот же день
  • получать разные последовательности чисел каждый день

Я думаю, что я должен создатьRandom с DateTime в качестве семени, но я не уверен, как.DateTime.UtcNow.Ticks является длинным, а семя DateTime - int.

Я не хочу, чтобы hours/minutes/seconds влиял на случайность (за исключением границы между вчера и сегодня).Ответы, которые я нашел, все о передаче текущего времени в Random (или как это поведение по умолчанию без параметров ctor).

Ответы [ 2 ]

2 голосов
/ 04 апреля 2019
// UTC ensures all users see the date flip occur at the same
// time. If you want the date flip to be local for the user's
// time zone, use DateTime.Today instead.
var date = DateTime.UtcNow.Date;
// Generate a seed by combining the year and the day of the year.
// DayOfYear is always gregorian (ignores culture) and always in
// [1,366].
var seed = date.Year * 1000 + date.DayOfYear;
return new Random(seed);
0 голосов
/ 04 апреля 2019

Может быть, лучше генерировать последовательность случайных чисел один раз в день и сохранять их, чтобы эти числа можно было «переиграть» людям, которые играют в задание в течение этого дня.Этот подход может быть жизнеспособным, например, если этот вызов состоит из случайно сгенерированной игровой доски-головоломки.Этот подход также имеет то преимущество, что приложение не будет привязано к конкретной реализации RNG.Смотрите также мою статью о сеяных RNG .

...