您好!我目前正在使用C ++进行文本冒险,可以使用一些帮助。
我要做的是让用户输入如下命令:
并使游戏做出相应的反应。
我们的老师给了我们以下代码(我已修改过),我很难理解它究竟是做什么以及如何使用它来制作游戏。我对其进行了修改,以便用户可以输入string
并将string
奇妙地标记为动词,对象,介词和对象2.
但我需要做的是以某种方式将输入与可用命令列表进行比较。这就是我现在遇到的麻烦。我是编程新手,需要做这个作为我学习的家庭作业。任何帮助将非常感激。
struct command {
char* verb;
char* object;
char* preposition;
char* object2;
};
bool getTokens(char * acInput,
const char token_delimiter,
command * pTargetCommand)
{
char * pCurToken;
pCurToken = strtok (acInput, &token_delimiter);
if (pCurToken == NULL) {
printf("Error: Found no verb");
getchar();
return 1;
}
pTargetCommand->verb = pCurToken;
pCurToken = strtok (NULL, &token_delimiter);
if (pCurToken == NULL) {
printf("Error: Found no object");
getchar();
return 1;
}
pTargetCommand->object = pCurToken;
pCurToken = strtok (NULL, &token_delimiter);
if (pCurToken != NULL) {
pTargetCommand->preposition = pCurToken;
pCurToken = strtok (NULL, &token_delimiter);
if (pCurToken == NULL) {
printf("Error: Found no second object for preposition");
getchar();
return 1;
}
pTargetCommand->object2 = pCurToken;
}
pCurToken = strtok (NULL, &token_delimiter);
if (pCurToken != NULL) {
printf("Error: too many tokens.");
getchar();
return 1;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char acInput[256];
cin.getline (acInput,256);
command myCommand = { NULL };
int RoomChoice = 0;
printf ("Splitting string \"%s\" into tokens:\n", acInput);
getTokens(acInput, *TOKEN_DELIMITER, &myCommand);
printf ("Verb: %s\n", myCommand.verb);
printf ("object: %s\n", myCommand.object);
printf ("preposition: %s\n", myCommand.preposition);
printf ("object2: %s\n", myCommand.object2);
getchar();
return 0;
}
答案 0 :(得分:2)
如果不放弃太多的家庭作业,你需要以某种方式将所有可用动作的列表读入结构中,然后与该结构进行比较。
作为提示,取决于模式,可能是switch(){}语句或类似数组的集合。
考虑 开关(myCommand.verb) 案例“去”:
在实际应用程序中,您将启动一个命令对象工厂,然后调用其中一个。但是,我建议您考虑控制语句。
答案 1 :(得分:0)
您无法使用字符串进行切换(如您所述,切换仅使用常数)
要比较使用strcmp,strncmp或更好的字符串,请使用String.compare。您应该可以通过Google搜索找到有关它们的足够信息。