字符串解析器文本冒险

时间:2012-01-06 00:56:19

标签: c++ text adventure

您好!我目前正在使用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;
  }

2 个答案:

答案 0 :(得分:2)

如果不放弃太多的家庭作业,你需要以某种方式将所有可用动作的列表读入结构中,然后与该结构进行比较。

作为提示,取决于模式,可能是switch(){}语句或类似数组的集合。

考虑 开关(myCommand.verb)   案例“去”:

在实际应用程序中,您将启动一个命令对象工厂,然后调用其中一个。但是,我建议您考虑控制语句。

答案 1 :(得分:0)

您无法使用字符串进行切换(如您所述,切换仅使用常数)

要比较使用strcmp,strncmp或更好的字符串,请使用String.compare。您应该可以通过Google搜索找到有关它们的足够信息。