我每天在游戏中挑战。每天应该是一个新的挑战。我的程序生成使用了随机数生成器。尝试两次每日挑战(或两个不同的用户尝试)应具有相同的结果(相同的随机数序列)。
我想要:
我想我应该创建一个Random
作为种子的DateTime
,但是我不确定该如何做。 DateTime.UtcNow.Ticks
是长整数,而DateTime的种子是int
。
我不希望hours/minutes/seconds
影响随机性(除了昨天和今天之间的边界)。我找到的答案都是关于将当前时间传递到Random
(或者这是默认的无参数ctor行为)的问题。
答案 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上的文章。