2015-03-02 103 views
-1

十多年來,我第一次回到編程中,並且我在C++中有點生疏。用戶輸入解析關鍵字C++

我決定做一個zork類型的遊戲,它有一個基於文本的用戶提示對所有玩家的動作,但我想解析字符串輸入(我使用getline(cin,MyString))關鍵字並解釋用戶。我正在尋找某種別名,以便如果用戶輸入以下任何一項:yes,y,yes,Yesir,Yessem,Yep,Uh-Huh等,它會將其解釋爲「是」,並且沒有巨大的病例陳述。我將爲這些關鍵字添加一些關鍵字,並且我想輕鬆添加更多關鍵字。

我期待遊戲將關鍵字與文本文件中的關鍵字列表進行比較,並確定要使用的基本關鍵字,以便我可以從其輸入中確定操作。

是否有任何已建立的庫或實踐可用於此功能?

目前看是這樣的:

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

比方說,你有一個動作類的所有可能的情況。

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函數,甚至改變狀態。