从不同类别中获取随机数(骰子游戏)

本文关键字:游戏 取随机数 同类 | 更新日期: 2023-09-27 18:26:53

我正在尝试为游戏Farkle编程。它一次最多掷6个骰子。我创建了一个Die类来保存Die的值,并创建了Roll()方法来滚动Die。

游戏将创建一个由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();
        }
    }
}

谢谢。

从不同类别中获取随机数(骰子游戏)

您可以在Die类中使用private static变量。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
        }
    }
}