Текстовый анализатор приключений

Здравствуйте! В настоящее время я работаю над текстовым приключением на 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 ответа

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

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

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

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

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

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

Другие вопросы по тегам