我正在使用 run of the mill C++,并且正在构建一个小型“Zork-esc”游戏作为宠物项目来锻炼我新学到的 C++ 技能。以下代码完美运行,但是对于每个命令/参数组合都必须这样做会很痛苦,所以如果有人可以为我省去一些麻烦,那么请做:D ...
就目前而言,我有这个功能负责在运行时处理命令......
void execute()
{
//###### Command builder ######
cout << ">>>";
char input[100];
cin.getline(input, sizeof(input));
cout << input << endl;
string newin = input;
//###### Execution Phase ######
if(newin=="derp"){
// normally functions go here
cout << "You did it :D" << endl;
}else if(newin=="attack player1 player2"){
// normally functions go here
cout << "player1 attacks player2" << endl;
}else{
// quriky error message for the user
cout << "dafuq?" << endl;
}
execute();
}
它接受您的输入并将其与所有可能的字符串组合进行比较,当它找到匹配项时,它假设运行放置在 IF 语句中的相应函数
就像我说的那样有效,但我觉得还有很大的改进空间......
编辑
我基本上是在移植我用python制作的程序,用那种语言我花了三行十分钟才弄明白。
我使用带有一些字符串的 eval() 函数,所以我可以使用标准的“name(arg)”格式输入函数名。它基本上只是评估我的字符串并运行函数,就像这样......
def execute(arg):
try:
eval(arg)
except TypeError:
print('=====## Alert ##=========================================================')
print('You must provide the arguments in the parentheses')
print('=========================================================================')
except SyntaxError:
print('=====## Alert ##=========================================================')
print('I didn\'t understand that D:')
print('=========================================================================')
所以如果我有一个名为attack()的函数,它接受两个参数“player1”和“player2”,我可以在提示符“attack(player1,player2)”中输入它,它会像我输入的那样运行在代码的主体中运行它。那么有没有办法让 c++ 像代码一样评估字符串?喜欢...
字符串derp =“攻击(玩家1,玩家2)”