调试vs Step Into解决方案时输出不同

时间:2013-12-07 14:47:05

标签: c# debugging visual-studio-2013

我有一个非常奇怪的问题,我一生都没有接触过。

这就是我的目标: 我编写了一个游戏,其中包括你要扔两个骰子,两个骰子的总和应该是七个让你获胜。

这是界面的构建方式:

  • textbox1显示第一个掷骰子的值。
  • textbox2显示第二个掷骰子的值。
  • textbox3显示两个骰子的总和。
  • button1抛出骰子。

这就是问题:

  • 当我在 Visual Studio 2013 Ultimate 中调试(F5)应用程序时 文本框始终获得完全相同的值。这是错误的,不应该这样。

  • 当我进入(F11)文本框获取的应用程序/代码时 不同的价值观,正如它应该是的,这是正确的,这就是该计划的行动方式。

有没有人可以帮助解决这个问题,我认为我错过了一个非常小但很明显的事情,我错过了但我真的找不到任何东西,我实际上是出于想法!

附件

以下是所有文件,我希望它能为您提供帮助,该程序是用瑞典语编写的,但我认为没有任何问题,如果有的话,我可以将整个解决方案翻译成英语。

整个解决方案: Throw_Dices.zip

守则Big picture on three screens of the code

2 个答案:

答案 0 :(得分:2)

From MSDN

  

由a紧密连续创建的不同随机对象   对默认构造函数的调用将具有相同的默认种子   值,因此,将产生相同的随机数集

Kasta.cs中,创建一个静态的Random实例,而不是多个。

public class Tarning
{
    private static Random ran = new Random();
    int slump;
    public int Kasta()
    {
        //Random ran = new Random();
        slump = ran.Next(1, 6);
        return slump;
    }
}

另一种可能性是手动创建种子。例如

public int Kasta()
{
    byte[] seed = new byte[4];
    new RNGCryptoServiceProvider().GetBytes(seed);
    int seedInt = BitConverter.ToInt32(seed, 0);
    Random ran = new Random(seedInt);
    slump = ran.Next(1, 6);
    return slump;
}

答案 1 :(得分:1)

而不是创建两个Dice(Tarning?)

创建一个并滚动两次。

或者在启动时创建两者,或者可能有一个包含2个骰子的类。 并再次抛出它们。

你也应该谷歌随机和播种,发生的是来自相同的种子值,你得到相同的随机数序列。调试在新的随机调用之间引入了足够的延迟,即种子(基于时钟)在两次调用之间发生了变化。

PS你的button1Click处理程序

应设置三个文本框值,而不是触发文本框已更改的事件然后设置它们。想象一下,如果你想重用你的代码,你必须创建一个用户界面来完成它。

更好的方法是让一个类使用Roll方法保存两个(或n)骰子,并返回返回结果的属性。然后你可以重复使用它,而不必担心何时以及如何。