当前位置: 首页 > 知识库问答 >
问题:

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

容柏
2023-03-14

我在试着给游戏Farkle编程序。它一次最多可以掷出6个骰子。我创建了一个骰子类来保存骰子的值,并创建了一个Roll()方法来滚动骰子。

游戏将创建一个由6个骰子组成的数组,并一次掷出它们,所以我不希望Die类在类的每个实例中创建一个 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个答案

徐安康
2023-03-14

您可以在 Die 类中使用私有静态变量,静态类只会为 MainForm 中的所有 dices 实例声明一次。

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
        }

    }
}
 类似资料:
  • 一个简单的新手问题,奇怪的是我一直没能找到解决方法。

  • 我对编程有点陌生,我想知道如何编写一个随机掷骰子的java程序。这方面的要求是: 私有成员: -final int numSides ^^die的边数 -public方法 ^^骰子(int sides) @@@将numSides设置为sides参数。 @@@用于创建具有不同边数的骰子,例如,在main中可以说骰子d6=新骰子(6)以创建六边die。 ^^int roll() ^^返回一个从1到包括

  • 我试图编写一个方法rollDice(int number,int nSides),它返回用nSides边滚动数字骰子的总结果。

  • 有人能在这里给我指个正确的方向吗?我的游戏工作完美,但我想添加一些实际的互动/目标。谢谢

  • 问题内容: 我有一个生成事实的简单应用。我想合并一个生成随机事实而不是递减的函数。 我的数组看起来像这样。 问题答案: 使用随机类。该类有一个方法,(doc)和引号: 返回一个伪随机数,它从此随机数生成器的序列中提取,在0(含)和指定值(不含)之间均匀分布的int值。nextInt的一般约定是伪随机生成并返回指定范围内的一个int值。所有n个可能的int值均以(近似)相等的概率产生。 因此,您需要

  • 问题内容: 我正在尝试编写一个rollDice(int number,int nSides)方法,该方法返回滚动带有nSides边的数字骰子的总结果。 因此,例如rollDice(3,6)应该返回滚动3个六边骰子的结果(加上3到18之间的数字)。 当我输入1 来解决此问题时,下面的方法返回负数? 问题答案: 你只需要初始化和各一次,所以我已经从循环中去除它们。nextInt(int)方法选择一个从