将字符串转换为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
吗?)
也许您的任务实现方法不适合这种情况?与其每个任务都有一个类,为什么不实现一个通用的任务类,并为每个任务创建一个类的实例呢?将这些实例存储在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或你想用来识别他们的东西来存储任务。
这样,当你想在游戏中添加更多任务时,你可以有更多的灵活性。您不需要修改现有的代码,也不需要用数千个表示相同数据结构的类来扩充代码。