playerDice = new Dice();
int playerDiceNo = playerDice.getfaceofDie();
MessageBox.Show("Your roll" + playerDiceNo);
compDice = new Dice();
int compDiceNo = compDice.getfaceofDie();
MessageBox.Show("Computers roll:" + compDiceNo);
Run Code Online (Sandbox Code Playgroud)
上面是我点击滚动按钮时的方法.下面是我的骰子课:
class Dice
{
private int faceofDie;
public void rollDice()
{
Random rollDice = new Random();
faceofDie = rollDice.Next(1, 7);
}
public int getfaceofDie()
{
return faceofDie;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经为compDice和playerDice声明了我的变量:
Dice compDice;
Dice playerDice;
Run Code Online (Sandbox Code Playgroud)
我似乎无法弄清楚为什么它会为两个翻转都返回0.有人可以帮忙吗?
我似乎无法弄清楚为什么它会为两个翻转都返回0.有人可以帮忙吗?
您永远不会调用rollDice(),因此faceofDie永远不会设置变量,并且默认值为0.
playerDice = new Dice();
playerDice.rollDice(); // Add this
int playerDiceNo = playerDice.getfaceofDie();
MessageBox.Show("Your roll" + playerDiceNo);
Run Code Online (Sandbox Code Playgroud)
更好的方法是在构造函数中第一次掷骰子,而不是继续创建新的Random实例:
class Dice
{
private static Random diceRoller = new Random();
private int faceofDie;
public Dice()
{
this.RollDice(); // Roll once on construction
}
public void RollDice()
{
lock(diceRoller)
faceofDie = diceRoller.Next(1, 7);
}
public int FaceOfDie
{
get { return faceofDie; }
}
}
Run Code Online (Sandbox Code Playgroud)
静态随机实例将防止同时实现的多个骰子获得相同的种子(因为它们都将共享一个随机数),这将有助于使结果更加一致.这也转移到标准C#约定,并将使用如下:
playerDice = new Dice();
int playerDiceNo = playerDice.FaceOfDie;
MessageBox.Show("Your roll" + playerDiceNo);
compDice = new Dice();
int compDiceNo = compDice.FaceOfDie;
MessageBox.Show("Computers roll:" + compDiceNo);
Run Code Online (Sandbox Code Playgroud)