playerDice = new Dice();
int playerDiceNo = playerDice.getfaceofDie();
MessageBox.Show("Your roll" + playerDiceNo);
compDice = new Dice();
int compDiceNo = compDice.getfaceofDie();
MessageBox.Show("Computers roll:" + compDiceNo);
上面是我点击滚动按钮时的方法。 下面是我的骰子课程:
class Dice
{
private int faceofDie;
public void rollDice()
{
Random rollDice = new Random();
faceofDie = rollDice.Next(1, 7);
}
public int getfaceofDie()
{
return faceofDie;
}
}
我已将compDice和playerDice的变量声明为:
Dice compDice;
Dice playerDice;
我似乎无法弄清楚为什么它会在两次翻转时返回0。过度。有人可以帮忙吗?
答案 0 :(得分:5)
我似乎无法弄清楚为什么它会在两次翻转时返回0。过度。有人可以帮忙吗?
您永远不会调用rollDice()
,因此永远不会设置faceofDie
变量,并且默认值为0。
playerDice = new Dice();
playerDice.rollDice(); // Add this
int playerDiceNo = playerDice.getfaceofDie();
MessageBox.Show("Your roll" + playerDiceNo);
更好的方法是在构造函数中第一次掷骰子,而不是继续创建新的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; }
}
}
静态随机实例将防止同时实现的多个骰子获得相同的种子(因为它们都将共享一个随机数),这将有助于保持结果更加一致。这也转移到标准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);