Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
05.10.2007 14:01

Iriska
Участник
Зарегистрирован: 05.10.2007
Сообщений: 2

С чего начать разработку движка для текстовой игры

Преподаватель дал странное задание для курсовой работы по компьютерной анимации: "Напиши текстовую игру". Язык С, С++, библиотека OpenGL, никаких движков, только "самостаятельная работа и живой код". Знакомые сказали, что для написания текстовой игры нужно знать теорию создания компиляторов и построения формальных языков и еще кучу всего. К сожалению, они не смогли посоветовать ничего более конкретного, поэтому обращаюсь к вам.
Подскажите, пожалуйста, с чего начать, что почитать, нет ли известных алгоритмов анализа текста?
Я не питаю иллюзий, что у меня сразу получится нечто сотящее, но хоть что-то сделать надо.

Неактивен

0    0    #2
08.10.2007 18:51

uux
Участник (+884, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1624

Re: С чего начать разработку движка для текстовой игры

Iriska написал:

OpenGL по замыслу преподавателя должен визуализировать то, что написано в тексте, а сам текст должен выводиться в консоли. Мне эта идея не нравится, потому что я предчувствую проблемы с кодировками в консоли (код должен быть мультиплатформенный Mac OS X и WindowsXP), да и странно это - игра в двух окнах.

Текст вообще-то можно тоже выводить в виде графики (в зависимости от нажатой кнопки программа отображает тот или иной битмап). Хотя тут я, увы, могу только теоретизировать - опыта программирования графических приложений, да еще в OpenGL у меня нет.

Iriska написал:

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

Ну, это в принципе и есть база данных всех возможных ответов пользователя. Анализ состоит в том, что в зависимости от ответа игра реагирует по-разному. ИМХО, надо сразу определиться с набором команд, понимаемых игрой (поскольку она тестовая и посвящена поиску предмета в лабиринте, то вполне можно ограничиться основными направлениями (север, юг, восток, запад + сокращения), ну, может, еще добавить команду "взять <предмет>" с синонимами и словоформами для глагола ("возьми, бери, брать"  и т. д.) и для предмета (предметов), которые можно брать). Необходимое количество реализуемых команд и словоформ в данном случае определяется исключительно вредностью конкретного преподавателя;).

При таком минимальном наборе лексический анализ будет состоять в том, что при наличии незнакомого ей слова в команде игра ответит "я не знаю слова <незнакомое слово>". В простейшем случае его можно реализовать развесистым оператором типа switch-case или поиском в списке.

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

> яблоко
> яблоко север
> яблоко взять

Команда должна начинаться с глагола!

> север яблоко
> север взять

После команды имеются лишние слова!

> взять север

В команде не может быть двух глаголов.

> взять

Необходимо указать, что вы хотите взять.

Примерно вот так. В простейшем случае пугаться совершенно нечего, а если преподаватель потребует чего-то более изощренного - пишите, будем думать.

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru