Анализ соответствия нескольких возможных строк в текстовом приключении. - PullRequest
2 голосов
/ 07 декабря 2011

У меня первый семестр в университете, и я должен сделать текстовую приключенческую игру на с ++. Пока что мы сделали массивы , структуры и указатели . Я пытался погуглить мою проблему, однако большинство других пользователей используют классы, которые мы еще не сделали.

Профессор хотел бы, чтобы мы использовали такие команды, как Go North, open door with key и т. Д.
Мне удалось заставить его работать с помощью горячих клавиш типа n, чтобы идти на север, но, очевидно, я бы хотел сделать это так, как он того хочет.

Итак, мой вопрос; Как я могу сделать команду, состоящую из нескольких строк?

Проблема в том, что нам нужно создать библиотеки для команды, объекта и (если в этой комнате есть возможность объединить две вещи) предлог с другим объектом. В каждой библиотеке должны быть слова для использования, например: Команды: Использовать, идти, говорить, читать и т. Д. ...

Ответы [ 5 ]

1 голос
/ 07 декабря 2011

Взято из http://www.cplusplus.com/reference/iostream/istream/getline/

#include <iostream>
using namespace std;

int main () {
  char name[256], title[256];

  cout << "Enter your name: ";
  cin.getline (name,256);

  cout << "Enter your favourite movie: ";
  cin.getline (title,256);

  cout << name << "'s favourite movie is " << title;

  return 0;
}
0 голосов
/ 07 декабря 2011

Полагаю, вы используете cin для чтения команд? В этом случае введите входные данные в string, используйте find, чтобы найти в нем пробелы, и substr, чтобы извлечь команду и ее аргументы. Попробуйте преобразовать все подстроки в нижний или верхний регистр, так как будет легче сравнить их позже.

Теперь возьмите подстроку команды и сравните ее со всеми вашими командами. Когда вы найдете совпадение, вызовите специальную функцию, которая выполняет команду, передавая аргументы функции. Например, для команды "go" у вас может быть функция go, которая принимает направление в качестве аргумента.

0 голосов
/ 07 декабря 2011
  1. Используйте что-то вроде std::string input << std::cin; для ввода строки текста.
  2. Разделите вашу строку пробелами / пробелами.

Следующие шаги:

  1. Do токенизация команды в пары глагол / существительное, например Open / Door и Go / North
  2. Makeклассы, которые представляют ваши глаголы и предназначены для работы с объектами или определенными существительными

Некоторые темы для поиска:

0 голосов
/ 07 декабря 2011

Если вы спрашиваете, как читать команды, состоящие из нескольких слов, то вы можете использовать getline(), чтобы прочитать строку ввода как строку, а затем stringstream, чтобы прочитать каждое слово из этой строки, что-то вродеэто:

std::string line;
while (std::getline(std::cin, line)) {
    std::istringstream stream(line);
    std::string word;
    while (stream >> word) {
        // do something with this word
    }
}
0 голосов
/ 07 декабря 2011

Попробуйте найти функцию getline или scanf.Оба читают отформатированную строку из стандартного ввода (в вашем случае команда подсказки).Вы также можете использовать cin напрямую, проблема в том, что cin возвращает строку, состоящую из символов, до первого пробела.

...