骰子返回0而没有卷

时间:2013-05-02 15:53:46

标签: c# dice

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。过度。有人可以帮忙吗?

1 个答案:

答案 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);