骰子游戏的随机数

时间:2011-03-19 02:05:47

标签: c# silverlight windows-phone-7 random dice

  

可能重复:
  random string generation - two generated one after another give same results

我正在为Windows Phone 7编写一个简单的骰子游戏,它涉及同时滚动两个骰子。这是我的Dice Roll Code:

 private int DiceRoll()
    {
        int result;
        Random rnd = new Random();

        result = rnd.Next(1, 7);
        return result;
    }

然后我有这个代码在点击按钮时滚动骰子:

   private void roll_Click(object sender, RoutedEventArgs e)
    {
        roll1 = DiceRoll();
        roll2 = DiceRoll();}

我的问题是两个人都得到了相同的结果。

我知道如何获得通常会返回不同结果的滚动算法,但偶尔会返回相同的结果吗?

3 个答案:

答案 0 :(得分:11)

Random的默认种子基于当前时间。引用文档,

  

因此,通过调用默认构造函数紧密连续创建的不同Random对象将具有相同的默认种子值,因此将生成相同的随机数集。使用单个Random对象生成所有随机数可以避免此问题。

这正是你应该做的:创建一个Random实例并用它来生成所有随机数。

答案 1 :(得分:4)

你需要保留一个Random对象并重用它;每次创建新的Random对象时,都可以有效地重置数字序列以便在同一个地方开始。将Random对象存储为某个成员变量。每次运行程序时,您还希望使用不同的值对其进行播种 - 例如,基于系统时钟时间的值。

答案 2 :(得分:4)

如果您在单个应用程序中分配两个或更多随机对象,我见过的绝大多数'随机数'工具都会失败。你为每次调用分配一个新的Random对象,并且每次它们都会被一些非常弱的东西播种,甚至可能是相同的种子。

因此,生成一个单个 Random对象,并在应用程序的整个生命周期内使用它。