我十多年来第一次回到编程中,而且我在C ++中有点生疏。
我决定制作一个zork类型的游戏,该游戏具有基于文本的用户提示,可用于所有玩家操作,但我想解析字符串输入(我使用getline(cin,MyString))来获取关键字并解释用户。我希望有一些别名,以便如果用户键入以下任何一个:是,y,是,Yesir,Yessem,是的,呃,等等,它会将其解释为“是”并且没有巨型案件陈述。我将为多个关键字提供此功能,我希望能够轻松添加更多关键字。
我希望让游戏将关键字与文本文件中的关键字列表进行比较,并确定要使用的基本关键字,以便我可以根据输入确定操作。
我是否有可用于此功能的已建立的库或实践?
目前正在考虑这样的事情:
Get user input
Check user input for keywords
Put each keyword into a class
assign class variable for the alias aka Keyword.type()="yes" or Keyword.type()="north"
Perform action based on keywords
非常感谢任何帮助。
答案 0 :(得分:0)
假设你有一个针对所有可能情况的动作类。
class Action
{
public:
virtual void doAction(YourGame*)=0;
};
class YesAction : public Action
{
public:
void doAction(YourGame* game) {/* your yes logic */}
};
class NoAction : public Action
{
public:
void doAction(YourGame* game) {/* your no logic */}
};
然后,在YourGame
中,有一个std::map<std::string, Action*> actionMap
。
Action* yesAction = new YesAction();
actionMap["yes"] = yesAction;
actionMap["yep"] = yesAction;
actionMap["yeah"] = yesAction;
当您获得用户输入时,使用actionMap.find(userInput)
来获取可能的操作,如果它不是actionMap.end()
(这意味着没有这样的操作),请调用您获得的Action实例的doAction。
您还希望拥有isValid
等函数来检查给定操作是否对YourGame
中的当前状态有效。 doAction可以调用YourGame函数,甚至可以更改状态。
答案 1 :(得分:0)
你看过Ternary search tree吗?
实施是here.