它掷骰子应用程序。我想总结一下骰子的结果并将它们呈现给用户。目前,点击按钮后,骰子图像将发生变化"点击滚动骰子"。
但是,当我掷骰子1时,结果将不会添加(+0)而当我掷骰子2时,结果将只有(+1)。我不知道我的代码有什么问题:
public partial class PigForm : Form
{
Image[] diceImages;
int[] dice;
Random roll;
private void rollDieBotton_Click(object sender, EventArgs e)
{
RollDice();
}
private void RollDice()
{
for (int i = 0; i < dice.Length; i++)
{
var currentRoll = roll.Next(0, 6);
dice[i] += currentRoll;
dicePictureBox.Image = diceImages[currentRoll];
playersTotal.Text = String.Format("{0}", dice[i]);
}
}
private void PigForm_Load(object sender, EventArgs e)
{
diceImages = new Image[6];
diceImages[0] = Properties.Resources.Alea_1;
diceImages[1] = Properties.Resources.Alea_2;
diceImages[2] = Properties.Resources.Alea_3;
diceImages[3] = Properties.Resources.Alea_4;
diceImages[4] = Properties.Resources.Alea_5;
diceImages[5] = Properties.Resources.Alea_6;
dice = new int[1] { 0 };
roll = new Random();
}
}
答案 0 :(得分:4)
var currentRoll = roll.Next(0, 6)
这将生成0到5之间的随机数,包括0和5。您可能希望生成1到6:
var currentRoll = roll.Next(1, 7)
参考:Random.Next Method (Int32, Int32)
修改强>
dicePictureBox.Image = diceImages[currentRoll - 1]
答案 1 :(得分:4)
对您的代码进行一些评论:
Next()
类的Random
方法有两个参数。第一个是包容性下限,第二个是独占上限。在你的情况下意味着0将是一个可能的数字,而6将永远不会发生。 (MSDN页面:Random.Next Method (Int32, Int32))以下是对代码的轻微修改:
public partial class PigForm : Form
{
Image[] diceImages;
int dice;
Random roll;
private void rollDieBotton_Click(object sender, EventArgs e)
{
RollDice();
}
private void RollDice()
{
var currentRoll = roll.Next(1, 7);
dice += currentRoll;
dicePictureBox.Image = diceImages[currentRoll-1];
playersTotal.Text = String.Format("{0}", dice);
}
private void PigForm_Load(object sender, EventArgs e)
{
diceImages = new Image[6];
diceImages[0] = Properties.Resources.Alea_1;
diceImages[1] = Properties.Resources.Alea_2;
diceImages[2] = Properties.Resources.Alea_3;
diceImages[3] = Properties.Resources.Alea_4;
diceImages[4] = Properties.Resources.Alea_5;
diceImages[5] = Properties.Resources.Alea_6;
dice = 0;
roll = new Random();
}
}
答案 2 :(得分:3)
您允许currentRoll
变量为[0, 6]
之间的任何内容。其中包括0
但不包括6
。您应该更改为var currentRoll = roll.Next(1, 7);
编辑注释:然后,为了访问您的数组值(零索引),您应该从滚动结果中减去一个。
答案 3 :(得分:3)
您的代码包含一些修改:
var currentRoll = roll.Next(1, 7);
dice = currentRoll; // there should not be += operator because the result of the next roll will be absurd
dicePictureBox.Image = diceImages[currentRoll - 1]; // -1 because your array is zero-based which means that it starts from 0
这就是随机类真正起作用的方式。包含在你的情况下为1的初始值,但结尾的值不是,所以你需要的是1,7因为它将返回1到6之间的数字。
答案 4 :(得分:1)
正如其他人所指出的那样,Random.Next(a, b)
会在包含和不包含b之间生成一个随机数。
虽然很容易做到
var currentRoll = roll.Next(1, 7);
会破坏你后面有两行的数组访问行。
相反,您最好的选择是修改添加行,
dice[i] += currentRoll + 1;
答案 5 :(得分:0)
查看Random.Next(int,int)方法的文档:
http://msdn.microsoft.com/en-us/library/2dx6wyd4%28v=vs.110%29.aspx
在那里你会发现下限是包含的,上限是独占的。 因此,Next(0,6)表示您得到0,1,2,3,4或5。
答案 6 :(得分:0)
我并不完全明白你的问题是什么,但我确实发现了一些看起来不对的东西。
尝试更改:
dice[i] += currentRoll;
使用:
dice[i] += currentRoll+1;