将字符串转换为bool或Get、Set或Dictionary

本文关键字:Get Set Dictionary bool 字符串 转换 | 更新日期: 2023-09-27 18:27:17

构建一个基于任务的游戏,我为每个任务都有一个类(Quest1423, Quest1424, Quest1425)和几个静态/参考类(QuestStart, QuestEnd)

我想让静态/引用类QuestEnd更新CURRENT任务类boolean QuestComplete,而不需要编码哪个任务的名称(因为它们会更改)。

我试图在每个任务类public static string Name = "Quest1425";中创建一个变量,以引用任务类中的bools(静态/引用类Quest1425.QuestCompleted = true; to generic "Name".QuestComplete = true; 中的public static bool QuestCompleted;

有没有一种通用的方法可以将字符串Name转换为静态/引用类中的变量名?有没有一种方法可以使用变量string.QuestCompleted来代替键入每个任务name.QuestCompleted

(我知道我的大写格式是关闭的,这只是一个例子)

(请不要把我提到MSDN,我不了解该网站的任何内容)

(Dictionary似乎只是将字符串从一个位置移动到另一个位置,你能解释一下Dictionary(string,Variable)吗?Bc我希望它是通用的,而不是特定的标识符。)

(我可以使用Get/Set从静态/引用类void/function中填充请求类bool吗?)

将字符串转换为bool或Get、Set或Dictionary

也许您的任务实现方法不适合这种情况?与其每个任务都有一个类,为什么不实现一个通用的任务类,并为每个任务创建一个类的实例呢?将这些实例存储在Dictionary实例中,并按名称引用Quest。你甚至可以通过在创建任务时传递一个委托来委托每个任务的功能:

public class Quest {
   public string Name { get; set; }
   public bool IsCompleted { get; set; }
   private delegate mOnQuestDoThis, mOnQuestDoThat;
   public static Dictionary<string, Quest> All { get; set; }
   public static Quest CurrentQuest { get; set; }
   public Quest(string name, delegate onQuestDoThis, delegate onQuestDoThat) {
       Name = name;
       IsCompleted = false;
       mOnQuestDoThis = onQuestDoThis;
       mOnQuestDoThat = onQuestDoThat;
       All.Add(name, this);
       if(CurrentQuest == null) {
          CurrentQuest = this;
       } 
   }
   static Quest() { All = new Dictionary<string, Quest>(); }
   public DoThis(...) { mOnQuestDoThis(...); }
   public DoThat(...) { mOnQuestDoThat(...); }
}

然后在您的进一步实现中创建一个新的任务:

new Quest("Quest1432", new delegate () => { ... }, new delegate () =>  { ... });

然后,要完成任务,设置当前任务,或完成当前任务:

Quest.All["Quest1432"].IsCompleted = true;
Quest.CurrentQuest = new Quest(...);
Quest.CurrentQuest.IsCompleted = true;

All字典应该作为成员在每个Player实例中,而不是静态生成,这样每个玩家都有自己的任务(这显然取决于游戏理念)。此外,你可以按名称、ID或你想用来识别他们的东西来存储任务。

这样,当你想在游戏中添加更多任务时,你可以有更多的灵活性。您不需要修改现有的代码,也不需要用数千个表示相同数据结构的类来扩充代码。