我有一个非常奇怪的问题,我一生都没有接触过。
这就是我的目标: 我编写了一个游戏,其中包括你要扔两个骰子,两个骰子的总和应该是七个让你获胜。
这是界面的构建方式:
这就是问题:
当我在 Visual Studio 2013 Ultimate 中调试(F5)应用程序时 文本框始终获得完全相同的值。这是错误的,不应该这样。
当我进入(F11)文本框获取的应用程序/代码时 不同的价值观,正如它应该是的,这是正确的,这就是该计划的行动方式。
有没有人可以帮助解决这个问题,我认为我错过了一个非常小但很明显的事情,我错过了但我真的找不到任何东西,我实际上是出于想法!
以下是所有文件,我希望它能为您提供帮助,该程序是用瑞典语编写的,但我认为没有任何问题,如果有的话,我可以将整个解决方案翻译成英语。
整个解决方案: Throw_Dices.zip
答案 0 :(得分:2)
由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)骰子,并返回返回结果的属性。然后你可以重复使用它,而不必担心何时以及如何。