【问题标题】:random value assign with the class combination使用类组合分配随机值
【发布时间】:2016-05-22 05:32:53
【问题描述】:

这是我有一个法术类的情况

    public abstract class Spell
{

    public abstract void Castspell ();
}

public class Heal:Spell
{
    Dictionary<string, int> heals = new Dictionary<string,int> ();

    public Heal()
    {
        heals.Add ("less heal", 1);
        heals.Add ("medium heal", 2);
        heals.Add (" large heal", 3);
    }

    public override void Castspell()
    {
    }


}

忽略 Castspell(),还有另一个类叫做 student

    public class student
{
  public enum spells
    {
        lessheal,
        mediumheal,
        highheal
    }
    List<Spell> _skillist = new List<Spell>();
    public student()
    {
           //...
    }
            public void learnskills()
    {
        _skillist.Clear ();
        Spell newspell = new Spell ();
        _skillist.Add (newspell);

    }

我在这里要做的是我想学习技能方法,每次我调用它都会随机添加一个治疗法术到_skillist。(它可以是更少,中等或高)。我怎么能做到呢?请给我一些建议。谢谢

【问题讨论】:

标签: c# random


【解决方案1】:

这个问题非常广泛......但是我建议使用以下组合:

  • 在“Heal”上编写一个方法来从一个 spells 枚举值创建一个实例
  • 使用 System.Random 类生成随机数
  • 使用this answer 使用该随机数从法术枚举中获取随机项目

但是,为了做到这一点,您需要稍微更改该代码。由于您没有询问您的代码示例的特定问题,因此如果不为您重写所有内容,我将无法做更多,所以我将这部分留给您!

编辑:

  • 使用字符串字典或枚举来引用您的法术​​,但选择一个并保持一致。您同时使用两者 - 在一个类中使用字符串字典(例如“medium heal”),但在另一个类中使用枚举(spells.mediumheal)。如果您只需要一个带有相关数字的咒语列表,我建议您使用枚举。
  • 无论您使用什么,它都需要可以从两个类中访问。如果你想使用一个枚举,declare it in the namespace,而不是在一个类中;如果你真的喜欢 Dictionary ,或许可以将它放在一个单独的公共静态类中,如 this 示例。
  • 如果想使用枚举,this answer 可能会给你一些想法
  • 一般来说,代码确实可以从一些清理中受益,但这超出了您的问题范围

【讨论】:

  • 当然没有错,但是“heals”字典不是公开的,因此除非您更改访问修饰符,否则它将无法从学生类中的 learnskills() 方法中使用。跨度>
  • 我理解你说的前两点,但我如何从治疗类中实际指出它?我的意思是我创建一个随机类来生成一个数字,例如它是两个返回“中等愈合”但我怎样才能让它与愈合字典相关?我真的对这部分感到困惑
  • 我会更新我的答案,而不是在 cmets 中进行整个讨论
  • 另外,如果我帮助了您,请将我的回答标记为您问题的答案
猜你喜欢
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多