如何每天生成一个新的随机数序列?
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 的文章。
我在游戏中进行每日挑战。每一天都应该是一个新的挑战。我的程序生成使用 随机数生成器 。尝试每日挑战两次(或两个不同的用户尝试)应该有相同的结果(相同的随机数序列)。
我要:
- 生成一个随机数序列。
- 每次我在同一天开始生成,序列必须相同
- 每天获得不同的数字序列
我想我应该创建一个 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 的文章。