如何每天生成一个新的随机数序列?

How to generate a new sequence of random numbers every day?

我在游戏中进行每日挑战。每一天都应该是一个新的挑战。我的程序生成使用 随机数生成器 。尝试每日挑战两次(或两个不同的用户尝试)应该有相同的结果(相同的随机数序列)。

我要:

我想我应该创建一个 Random with a DateTime 作为种子,但我不确定如何创建。 DateTime.UtcNow.Ticks 是 long 而 DateTime 的种子是 int.

我不希望 hours/minutes/seconds 影响随机性(除了昨天和今天之间的界限)。我找到的答案都是关于将当前时间传递给 Random(或者这是默认的无参数 ctor 行为)。

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

最好每天生成一个随机数序列并存储它们,这样这些数字就可以 "replayed" 给当天参加挑战的人。例如,如果该挑战由随机生成的益智游戏板组成,则这种方法可能是可行的。这种方法还有一个优点,即应用程序不会绑定到特定 RNG 的实现。另请参阅我关于 seeded RNGs 的文章。