2013-10-24 47 views
1

我想制作一个骰子程序。所以当你点击滚动时,它应该滚动两个骰子并添加总和,这就是你滚动的数字。我需要一些帮助,这个窗体程序。这里是一些代码:骰子程序计算不正确?

private int totalRolls; 

private void btnRoll_Click(object sender, EventArgs e) 
{ 
    totalRolls += 1; 

    System.Random Int1 = new System.Random((int)System.DateTime.Now.Ticks); 
    System.Random Int2 = new System.Random((int)System.DateTime.Now.Ticks); 

    int randomInteger1 = Int1.Next(1, 7); 
    int randomInteger2 = Int2.Next(1, 7); 

    lblNumberRolled.Text = randomInteger1.ToString() + randomInteger2.ToString(); 

lblNumberRolled.Text代码我不认为是正确的。这是添加两个骰子以获得最终骰子总数的代码。但是当我运行它时,它会显示像30这样的大数字和其他东西。它不是添加或什么的。

最高的总和应为12

+2

[随机数发生器仅产生一个随机数]的可能重复(http://stackoverflow.com/questions/767999/random-number-generator-only-generating-one-random-number) –

+6

侧注意:'3.ToString()+ 0.ToString()'是'“30”'。 –

+1

注意事项2:请尽量提供可显示问题的最少示例代码。查看http://www.sscce.org获取指导。 –

回答

4

更改您的代码:

lblNumberRolled.Text = (randomInteger1 + randomInteger2).ToString(); 

说明:

randomInteger1.ToString() + randomInteger2.ToString() 

当randomInteger1是2,那么你做它的一个字符串,当randominterger2为1后为“2”+ String后为“1”。 当你+你“2” +“1” Concat的这些字符串,这就是21,而不是3

而且还有另外一个问题,您的代码: 蜱对象类型的长,你把它转换为INT。所以你松散的信息。这导致你将大部分时间都用于你的两个整数。这导致你会得到大部分时间相同的随机整数。

把你的电话随机之间的Thread.Sleep(20)将修复它:

System.Random Int1 = new System.Random((int)System.DateTime.Now.Ticks); 
Thread.Sleep(20); 
System.Random Int2 = new System.Random((int)System.DateTime.Now.Ticks); 
+0

感谢它的工作。 :)谁知道把括号放在错误的东西上可能完全搞砸了代码哈哈。感谢大家! – Gunnar

+1

请解决“随机性”部分以获得完整答案。 –

+0

更新了我的答案。我希望这是你的意思? – Dannydust

2

这是因为你使用字符串+。当你在字符串中使用'+'时,编译器认为它不是数学运算而是连接运算符。

请尝试以下

而不是

lblNumberRolled.Text = randomInteger1.ToString() + randomInteger2.ToString(); 

尝试

lblNumberRolled.Text = Convert.ToString(randomInteger1+randomInteger2); 
0

你可以这样说:

Label lb = new Label(); 
Random random = new Random(); 
int ranNum1 = random.Next(1, 7); // random num 1-6 
int ranNum2 = random.Next(1, 7); // random num 1-6 
lb.Text = Convert.ToString(ranNum1 + ranNum2); 
Form.Controls.Add(lb); 

,这意味着你想要的东西,如:

Random random = new Random(); 
randomInteger1 = random.Next(1,7); 
randomInteger2 = random.Next(1,7); 
lblNumberRolled.Text = Convert.ToString(randomInteger1 +randomInteger2);