текстовый анализатор приключений - PullRequest
1 голос
/ 06 января 2012

Hello!В настоящее время я работаю над текстовым приключением на C ++ и могу использовать некоторую помощь.

Я пытаюсь сделать так, чтобы пользователь ввел следующую команду:

  • 'иди на кухню '
  • ' открой дверь ключом '

и заставь игру соответственно реагировать.

Наш учитель дал нам следующий код (который я модифицировал)и мне трудно понять, что именно он делает и как я могу использовать его для создания игры.Я изменил его так, чтобы пользователь мог вводить string s, и он чудесным образом маркирует 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 ]

2 голосов
/ 06 января 2012

Не отдавая слишком много домашнего задания, вам нужно каким-то образом прочитать список всех доступных действий в структуре, а затем сравнить с этой структурой.

Как подсказка, в зависимости от шаблона, это может быть оператор switch () {} или коллекция, подобная массиву.

Рассмотрим switch (myCommand.verb) Случай "go":

В реальном приложениираскручивать фабрику командных объектов, а затем вызывать один из них.Здесь, однако, я бы предложил продумать ваши контрольные высказывания.

0 голосов
/ 08 июня 2012

Вы не можете выполнять переключение со строками (как вы уже отметили, переключение работает только с постоянными числами)

Для сравнения строк вы можете использовать strcmp, strncmp или, что еще лучше, использовать String.compare.С помощью поиска Google вы сможете найти достаточно информации о них.

...