1

你好!我目前正在使用 C++ 进行文本冒险,可以使用一些帮助。

我想要做的是让用户输入如下命令:

  • '去厨房'
  • '用钥匙开门'

并使游戏做出相应的反应。

我们的老师给了我们以下代码(我已经修改过),我很难理解它到底在做什么以及如何使用它来制作游戏。我对其进行了修改,以便用户可以输入strings,它确实将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;
  }
4

2 回答 2

2

在不放弃太多家庭作业的情况下,您需要以某种方式将所有可用操作的列表读入一个结构,然后与该结构进行比较。

作为提示,根据模式,这可能是 switch() {} 语句或像数组这样的集合。

考虑 switch (myCommand.verb) 案例“go”:

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

于 2012-01-06T00:59:07.063 回答
0

您不能使用字符串进行切换(正如您已经指出的,切换仅适用于常量)

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

于 2012-06-08T17:55:12.240 回答