从不同的班级获取随机数(骰子游戏)

时间:2015-12-16 02:26:06

标签: c# random dice

我正在尝试编写游戏Farkle。它一次卷起6个骰子。我创建了一个Die类来保存die的值,并创建一个Roll()方法来掷骰子。

游戏将创建一个包含6个骰子的数组,并将它们全部滚动,所以我不希望Die类在类的每个实例中创建一个Random(),否则所有骰子都会有相同的种子随机数。所以我在我的应用程序的MainForm中创建了新的Random()。

我很困惑从Die类调用Random()的正确方法,而不公开应该是私有的东西。我真的很新,并且觉得让一切都公开会更容易,但我想做正确的事。

我知道在整个程序中只使用一个Random()是最好的,那么如何让这个单独的类调用呢?

模具类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Farkle
{
    class Die
    {
        // Fields
        private int _value;

        // Constructor
        public Die()
        {
            _value = 1;
        }

        // Value property
        public int Value
        {
            get { return _value; }
        }

        // Rolls the die
        public void Roll()
        {
            _value = MainForm.rand.Next(6) + 1;
        }

    }
}

主要表格:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Farkle
{
    public partial class MainForm : Form
    {
        private Random rand = new Random(); // Should this be public? Or static?

        public MainForm()
        {
            InitializeComponent();
        }

        // Create dice array
        Die[] diceInHand = new Die[6];

        // Roll each die
        private void MainForm_Load(object sender, EventArgs e)
        {
            foreach (Die die in diceInHand)
                die.Roll();
        }
    }
}

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以在private static课程中使用Die变量。 static课程只会针对您所有的骰子宣布一次。您MainForm中的实例。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Farkle
{
    class Die
    {
        private static Random rand = new Random(); //note this new item
        // Fields
        private int _value;

        // Constructor
        public Die()
        {
            _value = 1;
        }

        // Value property
        public int Value
        {
            get { return _value; }
        }

        // Rolls the die
        public void Roll()
        {
            _value = rand.Next(6) + 1; //no need to refer to the mainForm
        }

    }
}