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

时间:2019-04-03 22:28:23

标签: c# random random-seed

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

我想要:

  • 生成一个随机数序列。
  • 每次在同一天开始生成时,序列必须相同
  • 每天获取不同的数字顺序

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

最好每天生成一次随机数序列并将其存储,以便可以将那些数字“重放”给当天挑战的人们。例如,如果该挑战由随机生成的益智游戏板组成,则此方法可能可行。这种方法还具有以下优势:该应用程序不会与特定RNG的实现绑定。另请参阅我在seeded RNGs上的文章。