我是c#的新手,尤其是类。我试着掷多个骰子,骰子的顶部是玩家的骰子,底部是电脑的骰子。我设置了一个计数器来计算每个掷骰子的次数并告诉用户。到目前为止,它给了我0。
此外,掷骰子是随机的,但我不确定它们是否完全随机。
任何帮助都会很棒。非常感谢。
namespace Week_6._3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
}
public void Squares(int x, int y)
{
int width = this.pictureBox1.Width;
int sizeDice = width/ 7;
Graphics paper = pictureBox1.CreateGraphics();
SolidBrush brushWhite = new SolidBrush(Color.White);
Pen penBlack = new Pen(Color.Black);
paper.FillRectangle(brushWhite, x, y, sizeDice, sizeDice);
paper.DrawRectangle(penBlack, x, y, sizeDice, sizeDice);
}
public void Circles(int x, int y, int counter)
{
SolidBrush blackbrush = new SolidBrush(Color.Black);
Graphics paper = pictureBox1.CreateGraphics();
int width = this.pictureBox1.Width;
int length = this.pictureBox1.Height;
int sizeDice = width / 7;
int sizeCircle = sizeDice/7;
int firstRowCircles = sizeCircle;
int secondRowCircles = sizeCircle * 3;
int thirdRowCircles = sizeCircle * 5;
Random random = new Random();
int num = random.Next(1,6);
if (num == 1)
{
counter = counter + 1;
paper.FillEllipse(blackbrush, x + secondRowCircles, y + secondRowCircles, sizeCircle, sizeCircle);
}
else if (num == 2)
{
counter = counter + 2;
paper.FillEllipse(blackbrush, x + firstRowCircles, y + firstRowCircles, sizeCircle, sizeCircle);
paper.FillEllipse(blackbrush, x + thirdRowCircles, y + thirdRowCircles, sizeCircle, sizeCircle);
}
else if (num == 3)
{
counter = counter + 3;
paper.FillEllipse(blackbrush, x + firstRowCircles, y + firstRowCircles, sizeCircle, sizeCircle);
paper.FillEllipse(blackbrush, x + secondRowCircles, y + secondRowCircles, sizeCircle, sizeCircle);
paper.FillEllipse(blackbrush, x + thirdRowCircles, y + thirdRowCircles, sizeCircle, sizeCircle);
}
else if (num == 4)
{
counter = counter + 4;
paper.FillEllipse(blackbrush, x + firstRowCircles, y + firstRowCircles, sizeCircle, sizeCircle);
paper.FillEllipse(blackbrush, x + firstRowCircles, y + thirdRowCircles, sizeCircle, sizeCircle);
paper.FillEllipse(blackbrush, x + thirdRowCircles, y + firstRowCircles, sizeCircle, sizeCircle);
paper.FillEllipse(blackbrush, x + thirdRowCircles, y + thirdRowCircles, sizeCircle, sizeCircle);
}
else if (num == 5)
{
counter = counter + 5;
paper.FillEllipse(blackbrush, x + firstRowCircles, y + firstRowCircles, sizeCircle, sizeCircle);
paper.FillEllipse(blackbrush, x + firstRowCircles, y + thirdRowCircles, sizeCircle, sizeCircle);
paper.FillEllipse(blackbrush, x + thirdRowCircles, y + firstRowCircles, sizeCircle, sizeCircle);
paper.FillEllipse(blackbrush, x + thirdRowCircles, y + thirdRowCircles, sizeCircle, sizeCircle);
paper.FillEllipse(blackbrush, x + secondRowCircles, y + secondRowCircles, sizeCircle, sizeCircle);
}
else if (num == 6)
{
counter = counter + 6;
paper.FillEllipse(blackbrush, x + firstRowCircles, y + firstRowCircles, sizeCircle, sizeCircle);
paper.FillEllipse(blackbrush, x + firstRowCircles, y + secondRowCircles, sizeCircle, sizeCircle);
paper.FillEllipse(blackbrush, x + firstRowCircles, y + thirdRowCircles, sizeCircle, sizeCircle);
paper.FillEllipse(blackbrush, x + thirdRowCircles, y + firstRowCircles, sizeCircle, sizeCircle);
paper.FillEllipse(blackbrush, x + thirdRowCircles, y + secondRowCircles, sizeCircle, sizeCircle);
paper.FillEllipse(blackbrush, x + thirdRowCircles, y + thirdRowCircles, sizeCircle, sizeCircle);
}
}
private void buttonRollDice_Click(object sender, EventArgs e)
{
int width = this.pictureBox1.Width;
int length = this.pictureBox1.Height;
int widthShift = width / 7;
int middleWidth = widthShift * 3;
int rightWidth = widthShift * 5;
int allTopDiceLength = length / 8;
int allBottomDiceLength = allTopDiceLength + (length / 2);
int playerCounter = 0;
int computerCounter = 0;
//Top Left Square
Squares(widthShift, allTopDiceLength);
Circles(widthShift, allTopDiceLength, playerCounter);
//Bottom Left Square
Squares(widthShift, allBottomDiceLength);
Circles(widthShift, allBottomDiceLength, computerCounter);
//Top Middle Square
Squares(middleWidth, allTopDiceLength);
Circles(middleWidth, allTopDiceLength, playerCounter);
//Bottom Middle Square
Squares(middleWidth, allBottomDiceLength);
Circles(middleWidth, allBottomDiceLength, computerCounter);
//Top Right Square
Squares(rightWidth, allTopDiceLength);
Circles(rightWidth, allTopDiceLength, playerCounter);
//Bottom Middle Square
Squares(rightWidth, allBottomDiceLength);
Circles(rightWidth, allBottomDiceLength, computerCounter);
labelPlayerRolls.Text = Convert.ToString(playerCounter);
}
}
}
代码实际上正在更新函数参数,因此您不会在调用方方法/函数中看到更新的值,因为它是由值而不是引用传递的。
您有几个选项可以解决此问题。
选项1:
您可以修改circle
方法定义以具有返回值。
public int Circles(int x, int y, int counter)
{
...
return counter
}
选项2:
将counter
作为引用参数传递。
public void Circles(int x, int y, ref int counter)
{
...
}
选项3:
定义实例变量并根据需要更新值(无需传递参数,直接使用实例变量)。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private int counter;
....
public void Circles(int x, int y)
{
...
}
}