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