1

我正在尝试制作一个骰子程序。因此,当您单击掷骰时,它应该掷两个骰子并将总和相加,这就是您掷出的数字。我需要一些有关此 Windows 窗体程序的帮助。这是一些代码:

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。

4

3 回答 3

4

将您的代码更改为:

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

解释:

randomInteger1.ToString() +  randomInteger2.ToString() 

当 randomInteger1 为 2 时,您创建一个字符串,它将为“2”+,当 randominterger2 为 1 后,字符串为“1”。当你用 + 连接这些字符串时,你会做“2”+“1”,那是 21 而不是 3。

您的代码还有另一个问题:Ticks 对象的类型为 long,您将其转换为 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);
于 2013-10-24T05:38:17.013 回答
2

这是因为您使用 + 表示字符串。当您将 '+' 与字符串一起使用时,编译器不会将其视为数学运算,而是串联运算符。

尝试以下

代替

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

尝试

lblNumberRolled.Text = Convert.ToString(randomInteger1+randomInteger2);
于 2013-10-24T05:41:02.397 回答
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);
于 2013-10-24T08:35:08.227 回答