Преподаватель дал странное задание для курсовой работы по компьютерной анимации: "Напиши текстовую игру". Язык С, С++, библиотека OpenGL, никаких движков, только "самостаятельная работа и живой код". Знакомые сказали, что для написания текстовой игры нужно знать теорию создания компиляторов и построения формальных языков и еще кучу всего. К сожалению, они не смогли посоветовать ничего более конкретного, поэтому обращаюсь к вам.
Подскажите, пожалуйста, с чего начать, что почитать, нет ли известных алгоритмов анализа текста?
Я не питаю иллюзий, что у меня сразу получится нечто сотящее, но хоть что-то сделать надо.
Неактивен
Iriska написал:
OpenGL по замыслу преподавателя должен визуализировать то, что написано в тексте, а сам текст должен выводиться в консоли. Мне эта идея не нравится, потому что я предчувствую проблемы с кодировками в консоли (код должен быть мультиплатформенный Mac OS X и WindowsXP), да и странно это - игра в двух окнах.
Текст вообще-то можно тоже выводить в виде графики (в зависимости от нажатой кнопки программа отображает тот или иной битмап). Хотя тут я, увы, могу только теоретизировать - опыта программирования графических приложений, да еще в OpenGL у меня нет.
Iriska написал:
Пугают слова о лексическом и синтаксическом анализе. Показалось, что это нечто вроде базы данных со всеми возможными вариантами ответов пользователя, но при чем тогда анализ?
Ну, это в принципе и есть база данных всех возможных ответов пользователя. Анализ состоит в том, что в зависимости от ответа игра реагирует по-разному. ИМХО, надо сразу определиться с набором команд, понимаемых игрой (поскольку она тестовая и посвящена поиску предмета в лабиринте, то вполне можно ограничиться основными направлениями (север, юг, восток, запад + сокращения), ну, может, еще добавить команду "взять <предмет>" с синонимами и словоформами для глагола ("возьми, бери, брать" и т. д.) и для предмета (предметов), которые можно брать). Необходимое количество реализуемых команд и словоформ в данном случае определяется исключительно вредностью конкретного преподавателя;).
При таком минимальном наборе лексический анализ будет состоять в том, что при наличии незнакомого ей слова в команде игра ответит "я не знаю слова <незнакомое слово>". В простейшем случае его можно реализовать развесистым оператором типа switch-case или поиском в списке.
Синтаксический анализ будет заключаться в том, что при наличии в команде понятных в принципе игре слов, но неправильном их расположении будет выдаваться подобающее случаю ругательство. Например, пусть в лабиринте надо найти яблоко. При принятых выше ограничениях набор сообщений об ошибках ограничится следующими:
> яблоко
> яблоко север
> яблоко взять
Команда должна начинаться с глагола!
> север яблоко
> север взять
После команды имеются лишние слова!
> взять север
В команде не может быть двух глаголов.
> взять
Необходимо указать, что вы хотите взять.
Примерно вот так. В простейшем случае пугаться совершенно нечего, а если преподаватель потребует чего-то более изощренного - пишите, будем думать.
Неактивен