|
| Система разработки интерактивной литературы на русском языке | |
| |
Автор | Сообщение | Система разработки интерактивной литературы на русском языке |
---|
mia V.I.P.
Сообщений : 184
Репутация : 7
| mia | :: Вт Фев 24 2009, 14:46 | Вт Фев 24 2009, 14:46 | |
| Система разработки интерактивной литературы на русском языке
Интерактивная литература (текстовые квесты) - это игры (в основном приключенческие, квесты), где игрок общается с компьютером, вводя команды, а игра отвечает ему, отображая текстовое описание событий. Что не исключает возможность включить в игру иллюстрации и музыкальное сопровождение. Некогда очень популярный на западе, жанр продолжает жить благодаря довольно большому сообществу игроков и авторов-энтузиастов, многие из которых уже многие годы выбирают для разработки именно TADS (Text Adventure Development System), разработанной Майклом Робертсом.
Русифицированная версия платформы RTADS изначально была максимально адаптирована для качественного вывода и анализа предложений русского языка.
Состояние разработки на сегодняшний день (2008 г.) - только поддержка, система в основном завершена, обновления библиотек появляются при необходимости.
Для перевода системы потребовалось адаптировать к другому языку оба библиотечных файла. Эта гигантская работа уже закончена и в настоящее время RTADS является наиболее проработанной и совершенной системой разработки текстовых квестов с командным управлением на русском языке. Гибкость языка позволяет автору настроить систему под себя и реализовать любой замысел.
О текстовых играх Первая текстовая приключенческая игра так и называлась - Adventure (по-английски - приключение). Игра представляла собой интерактивный симулятор подземелья. Игрок взаимодействовал с игрой, вводя команды типа "север" или "взять палку", а игра в ответ выводила текст, описывавший результаты действий игрока.
Во многих отношениях игра Adventure была довольно примитивной: команды игрока были ограничены одним или двумя словами, да и набор понимаемых игрой действий был невелик. И все же игра радикально отличалась от любых других игр, компьютерных или нет, созданных до нее, и быстро завоевала множество поклонников. Она приобрела такую популярность, что породила целый жанр игр, называемый "адвентюры" по имени родоначальницы жанра. По мере развития как самого жанра, так и компьютеров, которые могли выполнять все более и более сложные программы, приключенческие игры обрастали все новыми и новыми улучшениями и нововведениями, однако базовые идеи остались практически неизменными.
Приключенческие игры привлекают широкую аудиторию. В отличие от многих аркад, такая игра может быть пройдена до конца ("выиграна"), причем прохождение может занять дни, недели и даже месяцы. Лучшие представители жанра - это целые миры и захватывающие истории, поглощающие игрока целиком.
|
|
| | | mia V.I.P.
Сообщений : 184
Репутация : 7
| mia | :: Вт Фев 24 2009, 14:47 | Вт Фев 24 2009, 14:47 | |
| Что такое RTADS? Многие сложные задачи, которые необходимо решать при создании приключенческой игры, практически для всех адвентюр совпадают или весьма близки. Многие люди, занимавшиеся разработкой приключенческих игр, обнаружили, что эти схожие операции - вывод сообщений, проверка и установка состояний объектов в игре, сохранение и восстановление игр и т. д. - могут выполняться процедурами общих библиотек подпрограмм, которые могут использоваться не одной, а многими играми. Другие развили эту идею дальше, осознав, что создание специализированного языка программирования, предназначенного специально для написания текстовых квестов, может значительно облегчить жизнь авторам игр. RTADS - это как раз такой язык. RTADS - это система программирования, созданная специально для написания текстовых приключенческих игр (иначе называемых текстовыми адвентюрами или текстовыми квестами). Синтакс и структура языка программирования RTADS разработаны так, чтобы максимально облегчить реализацию даже сложных текстовых игр. RTADS предоставляет полноценную программу-интерпретатор, оснащенную всеми функциями, которые необходимы для профессионально сделанной текстовой игры, поэтому автор адвентюры может полностью сконцентрироваться на самой игре, не отвлекаясь на ее "движок". RTADS - это инструмент, облегчающий написание текстовых приключенческих игр. Система состоит из компилятора, который считывает исходный код, написанный на языке RTADS, проверяет его на наличие ошибок и преобразует его в некое внутреннее представление; а также из программы-интерпретатора, который считывает команды, вводимые игроком, и управляет взаимодействием между игроком и вашей игровой программой. Авторы, использующие TADS, обнаружат целый ряд преимуществ написания игр в этой системе перед языками программирования общего назначения. К таким преимуцществам относятся: - Значительная часть кода уже написана за вас: полноценный синтаксический анализатор, поддерживающий использование нескольких объектов в одной команде, объединение нескольких команд в одну, обращение к целому набору объектов при помощи местоимения "все", и многие другие мощные функции; процедуры работы с файлами - в частности, сохранения и восстановления игры; функция сохранения протокола игры в файл; механизмы сжатия строк, позволяющие сокращать объемы памяти и дискового пространства, необходимые для игры; готовый интерфейс пользователя; а также множество других необходимых функций, создание которых с нуля потребовало бы больших затрат времени. Таким образом, автор может полностью сконцентрироваться на игре, а не заниматься вспомогательным кодом низкого уровня, который составляет ее основу.
- Исходный код игр в TADS не требует модификации при переносе с одной операционной системы на другую - он будет одинаков для всех платформ, куда портирован TADS. А портирован он для многих систем, что автоматически означает переносимость игр на многие платформы без каких-либо усилий, за исключением переноса самого файла. Более того, начиная с версии 2.0 TADS, скомпилированный бинарный файл игры также полностью переносим, и вам даже не придется перекомпилировать игру при смене операционной системы. В то время, как портирование игры, написанной на языке программирования общего назначения, как правило, требует значительной работы, программы на TADS будут всегда выполняться одинаково на многих платформах, не требуя никакой адаптации под конкретную ОС.
- Написать игру на TADS гораздо проще, чем на неспециализированном языке программирования, благодаря тому, что TADS специально приспособлен для текстовых приключенческих игр. Язык содержит ряд конструкций, предназначенных для удобства написания адвентюр, а объектно-ориентированная природа языка делает создание игрового мира интуитивно-понятным. Кроме того, стандартные объектные классы, входящие в дистрибутив системы, разработаны таким образом, что элементы, общие для большинства текстовых приключенческих игр, могут быть реализованы практически без программирования. Таким образом, даже если бы автоматизация задач низкого уровня и переносимость игры, обеспечиваемые TADS, имелись бы и в каком-либо из языков программирования общего назначения, TADS все равно имел бы неоспоримое преимущество при написании текстовых квестов за счет более высокой эффективности своего синтаксиса и структуры.
|
|
| | | mia V.I.P.
Сообщений : 184
Репутация : 7
| mia | :: Вт Фев 24 2009, 14:47 | Вт Фев 24 2009, 14:47 | |
| Версия 1 TADS была успешным и полезным программным продуктом, однако совершенству, как известно, нет пределов. Разработчики TADS хотели сделать его еще более гибким и мощным инструментом, а также откликнулись на многие из предложений по улучшению системы, сделанных пользователями версии 1. Некоторые из наиболее важных функций, появившихся в версии 2: - Виртуальное кэширование объектов: одним из важнейших нововведений версии 2 является подсистема управления виртуальной памятью, позволяющая создавать и запускать игры, объем которых больше объема свободной оперативной памяти. Вместо того, чтобы загружать игру в память целиком, как это делалось в версии 1, вторая версия TADS загружает в память только те объекты игры, которые используются в данный момент. Остальные объекты хранятся в своп-файле на диске. Это позволяет запускать большие игры на компьютерах с малым объемом памяти и делает размер игры в TADS версии 2 практически неограниченным и независящим от конкретной компьютерной системы.
- Undo (отмена команд): программа-интерпретатор теперь позволяет игроку отменять команды. В отличие от некоторых других систем для написания приключенческих игр, TADS сохраняет большое количество точек отката, что позволяет игроку отменять сразу несколько последних сделанных ходов (более сотни для типичной конфигурации). Такая отмена команд позволяет повысить "играбельность", поскольку у игрока отпадает необходимость сохранять и восстанавливать игру всякий раз, когда он пытается предпринять что-нибудь рискованное.
- Дополнительный синтакс в стиле Си: во второй версии TADS добавлены многие конструкции, заимствованные из языка Си. Как и в Си, системой TADS отныне поддерживаются инструкции for, do-while, switch и goto. Локальным переменным могут быть присвоены начальные значения прямо при их объявлении, при этом в начале блока могут располагаться несколько инструкций local. Также были добавлены операторы `+=', `-=', `*=', `/=', `++', `--' и `,' (оператор-запятая), которые работают так же, как в Си (за исключением того, что оператор += может использоваться для списков и строковых переменных, а -= может использоваться со списками).
- Неявное использование self: при вызове или установке значения свойства объекта self вы можете опускать префикс "self." перед именем свойства - имя свойства можно использовать аналогично локальной переменной.
- Ссылки на свойства и функции: теперь вы можете сохранять "ссылку" на свойство объекта или функцию в переменной и затем использовать эту переменную для вызова функции или свойства.
- Настраиваемый вид строки состояния: в версии 2 вы можете выводить в области строки состояния, предназначенной для отображения информации о набранных очках и затраченных ходах, любую текстовую информацию - будь то время суток, достигнутый игроком уровень, или что-нибудь еще.
- Выделение текста: игры могут выделять отдельные участки текста. На некоторых системах это будет текст иного цвета, а на других - иного стиля (полужирный или курсив).
Версия 2 потребовала почти полной переработки TADS. Игры созданные в первой версии, автоматически используют многие из новых функций версии 2, например, виртуальный кэш объектов и возможность отмены команд игроком. После версии TADS 2.0 вышло еще несколько релизов. Полный перечень изменений содержится в документации, здесь же приведены только основные нововведения: - Добавлены инструкции replace и modify, позволяющие не редактировать файлы стандартных определений напрямую, а изменять отдельные их функции в дополнительном файле; появилась возможность настраивать вид приглашения командной строки в игре; улучшена поддержка языков с алфавитом, отличным от латинского; добавлен ряд встроенных функций.
- Добавлена возможность динамического создания объектов и их лексических свойств в процессе игры; добавлена возможность "захвата" текста, выводимого на экран; определены новые встроенные функции; существенно переработан синтаксический анализатор.
- Добавлена возможность динамического создания объектов и их лексических свойств в процессе игры; добавлена возможность "захвата" текста, выводимого на экран; определены новые встроенные функции; существенно переработан синтаксический анализатор; появился HTML-TADS - версия TADS, позволяющая использовать в текстовых играх расширенные возможности форматирования текста, вставлять иллюстрации, звук и т. д.
- Изменения синтаксического анализатора, а также возможностей HTML-TADS.
В новых версиях в комплект библиотек входит генератор падежей, позволяющий существенно упростить разработку и сделать код более читаемым. Так как система работает с заданными до компиляции описаниями объектов, формирование их падежных форм происходит в подготовительную фазу. Результат требует проверки и корректировки автором. Специально для русского языка дополнительно определяются атрибуты rdesc, ddesc, vdesc, tdesc и pdesc, которые просто представляют собой краткое описание объекта соответственно в родительном, дательном, винительном, творительном и предложном падежах. Поскольку игрок может взаимодействовать с игровыми объектами, им ставится в соответствие названия объектов. Атрибуты "noun" (существительное) и "adjective" (прилагательное) определяют слова, при помощи которых игрок может указать интерпретатору, какой именно объект он имеет в виду (или, проще говоря, назвать объект). Атрибуты noun и adjective могут иметь несколько значений. Причем для русского языка их, как правило, будет несколько, поскольку потребуется определить все падежные формы для каждого слова. Кроме того, помимо обычных шести падежных форм, для каждого из основных синонимов прилагательных и существительных определяются специальные формы, совпадающие с дательным и творительным падежом, но имеющие на конце суффиксы. Это требуется в связи с некоторыми особенностями работы RTADS с падежами (а точнее, для обхода отсутствия падежей в стандартном TADS). Существуют свои наборы функций и атрибутов например атрибут isHim, равный true, означает, что соответствующий предмет имеет мужской род, для предметов женского рода необходимо определять атрибут isHer, равный true, а для среднего рода ни один из этих атрибутов определять не нужно и т.д. |
|
| | | mia V.I.P.
Сообщений : 184
Репутация : 7
| mia | :: Вт Фев 24 2009, 14:48 | Вт Фев 24 2009, 14:48 | |
| Язык TADS Если вы умеете программировать на так называемых "процедурных" языках программирования, типа Си или Паскаля, большая часть языка TADS, скорее всего, покажется вам очень знакомой. Однако общая структура программы на TADS может поначалу показаться несколько странной.
В частности, игра, написанная на TADS, не имеет начала в том смысле, как у программ на Си или Паскале. Программа на Си или любом другом процедурно-ориентированном языке программирования представляет собой последовательность инструкций. Программа начинается с запуска функции main() и выполняет указанные в ней инструкции в том порядке, как они записаны. Программа может вызывать подпрограммы и выполнять циклы по ходу выполнения, но в целом выполнение программы происходит последовательно.
Программа на языке TADS, напротив, представляет собой просто набор определений объектов. Каждое определение задает "поведение" (набор ответных реакций на команды игрока) одного из объектов, присутствующих в игре. Определение объекта состоит из набора "свойств" (properties), которые представляют собой атрибуты объекта. Свойство может содержать какую-либо простую информацию или значение, например, название объекта или его вес, либо оно может содержать программный код с набором инструкций, определяющих поведение объекта.
В начале 1990-х годов, когда имевшиеся на рынке среды разработки (языки программирования) как раз и предлагали структуру программы как жесткую последовательность инструкций. В настоящее время пользователи в массе своей гораздо лучше подготовлены к идее программы как набора отдельных обработчиков и определений, поскольку ее использует большинство современных сред разработки приложений (Visual C, Delphi, Visual Basic...) Разумеется, эти "отдельные" обработчики связаны между собой в ту самую "жесткую последовательность инструкций", но эти связи скрыты от программиста, и он избавлен от большей части рутинной работы по их организации).
В TADS решения об использовании тех или иных свойств и объектов принимает синтаксический анализатор команд игрока (также называемый парсером или грамматическим разборщиком) в зависимости от того, какую команду ввел игрок.
|
|
| | | mia V.I.P.
Сообщений : 184
Репутация : 7
| mia | :: Вт Фев 24 2009, 14:48 | Вт Фев 24 2009, 14:48 | |
| Синтаксический анализатора (СА) TADS Когда мы говорим о синтаксическом анализаторе, мы подразумеваем некий набор инструкций программного кода, который считывает вводимые игроком команды, интерпретирует их и выполняет соответствующие действия в игре. Этот набор инструкций можно подразделить на две части: инструкции, встроенные в программу-интерпретатор TADS, и инструкции, записанные на языке программирования TADS непосредственно в игре. Кроме того, инструкции на языке программирования TADS можно подразделить на те, которые определены в стандартной библиотеке (например, adv.t или advr.t), и те, которые специфичны только для данной конкретной игры.
Большая часть синтаксического анализа осуществляется именно встроенной частью разборщика: именно там команда разбивается на отдельные слова (или "лексемы"), устанавливаются границы отдельных предложений при вводе строк, содержащих несколько команд, определяется, какие именно слова являются глаголами и предлогами, а также идентифицируются словосочетания. Встроенная часть СА также определяет процесс выполнения команды путем вызова определенной последовательности методов объектов, задействованных в команде.
Часть СА, встроенная в интерпретатор TADS, разумеется, не может быть непосредственно изменена из программы TADS-игры. Однако для этой встроенной части определен целый ряд так называемых "точек входа" - специальных мест, в которых игра может "вклиниваться" в процесс синтаксического анализа, обеспечивая соответствующий порядок обработки. За то время, пока развивалась система TADS, число этих точек входа и степень их влияния на обработку команд игрока постоянно росли; в современных версиях TADS осталась очень малая часть встроенного СА, недоступная для изменения.
Точки входа могут быть реализованы по-разному. Некоторые из них позволяют вам определять строковые выражения, которые СА будет использовать в качестве специальных слов - таких, как "все" или "кроме". Большая часть точек входа предоставляют стандартный заголовок для определения функции или метода объекта, которые будут вызываться СА на определенном этапе обработки команды; определив функцию с таким заголовком, вы сможете изменить поведение СА на этом этапе. В большинстве случаев точка входа позволит вам полностью переопределить соответствующий аспект встроенного СА.
Встроенный СА не содержит собственных определений глаголов, предлогов или объектов; все это делает программа игры. Поскольку большинство игр имеют общий набор основных команд и объектных классов, в TADS предусмотрена стандартная библиотека с большим количеством глаголов, предлогов и т.п. (файл adv.t или advr.t для русской версии).
Создавая игру, вы можете внести в стандартную библиотеку любые изменения; в экстремальном случае вы можете вообще не использовать ее и написать собственную библиотеку с нуля, либо использовать другую библиотеку, созданную сторонними программистами (например, WorldClass, Alt или Pianosa - правда, эти библиотеки являются англоязычными).
Синтаксический анализ, осуществляемый самой игрой Большинство игр определяют по меньшей мере несколько оригинальных глаголов, поскольку стандартные объектные библиотеки создаются таким образом, чтобы подходить как можно большему числу авторов, и в связи с этим не определяют все возможные глаголы. Кроме того, некоторые игры используют одну или несколько из упомянутых выше точек входа для модификации работы СА с тем, чтобы добиться неких специфичных для конкретной игры эффектов.
СА разбивает на отдельные слова введенную команду игрока. После этого он просматривает свои лексические таблицы в поисках объектов, соответствующих словам команды; специальные свойства verb, noun (существительное), plural (множественное число), adjective (прилагательное), article (артикль) и preposition (предлог) ставят объекту в соответствие набор лексических слов. Когда СА определит, к каким объектам относится команда игрока, он вызывает определенные методы этих объектов; эти методы выполняют всю работу по обработке команды. Поскольку методы определены внутри самих объектов, можно поменять практически любые аспекты поведения игры в TADS; однако благодаря механизму наследования не потребуется что-либо менять, достаточно использовать определения объектов в том виде, в каком они есть, заполняя только необходимые описания и свойства. Команде соответствует набор объектов; каждый объект классифицируется в соответствии со своей функцией в команде. Объектами являются: персонаж (actor), глагол (verb), набор так называемых прямых объектов (direct objects) (опционально), предлог (preposition) (опционально) и косвенный объект (indirect object) (опционально). Если игрок не дал команду другому персонажу (например: "робот, положи деталь в коробку"), СА предполагает, что персонажем является главный персонаж (ГП) (по умолчанию - Me).
СА получает параметр <префикс глагола> из глагольного объекта, если указан прямой или косвенный объект. Параметр <префикс глагола> - это строковое значение, определяемое свойством doAction глагольного объекта, если в команде задействован только прямой объект, или свойством ioAction того же глагольного объекта, если в команде присутствуют как прямой, так и косвенный объект.
В русском языке встречаются также конструкции без предлогов, например, "ударь врага топором". RTADS дополнен таким образом, что эти конструкции преобразуются к стандартному виду, принятому в TADS, при этом "нужный" предлог определяется в зависимости от падежа (например, указанная выше команда превращается в "ударь врага при помощи топора"). Все это происходит практически прозрачно для пользователя, и вам также не придется думать об этом (единственное, в чем это проявляется - необходимость определять в лексических свойствах объектов дополнительные строковые значения.
Необходимо знать, как присваивать объекту имя. Лексические свойства определяют имена для объекта, при помощи которых игрок может обращаться к этому объекту в своих командах; к лексическим свойствам относятся: noun (для имен существительных), adjective (для прилагательных), verb (для глаголов), preposition (для предлогов) и article (для артиклей, что в русской версии TADS неактуально). В большинстве случаев нужно определять свойства noun и adjective.
Отдельно стоит сказать о двух специальных значениях в списке - '#d' и '#t'; необходимость определения этих значений связана с тем, что СА TADS изначально ориентирован на английский язык, структура организации предложений в котором отличается от русского.
Для любого объекта, к которому игрок обращается в процессе игры, требуется определить свойство noun как список строковых значений, соответствующих формам названия объекта во всех падежах, а также два специальных значения: название в дательном падеже + #d и название в творительном падеже + #t.
Лексические свойства отличаются от всех прочих свойств. Единственная их функция - определить слова, с помощью которых игрок сможет обращаться к объекту. В отличие от обычных свойств, к лексическим свойствам нельзя обратиться непосредственно из игровой программы.
|
|
| | | mia V.I.P.
Сообщений : 184
Репутация : 7
| mia | :: Вт Фев 24 2009, 14:49 | Вт Фев 24 2009, 14:49 | |
| Встроенная функция getwords().Определяя для объекта лексическое свойство, вы фактически создаете слово, которое игрок сможет использовать в своих командах, а также указываете для этого слова соответствующую часть речи. Принадлежность слова к той или иной части речи определяет его использование в предложении - точно так же, как и в обычном, "человеческом" языке. Если вы определяете список слов для лексического свойства noun (имя существительное), то эти слова игрок сможет использовать в тех случаях, когда с точки зрения грамматики допустимо употребление существительных. Кроме того, вы указываете, что заданные вами слова относятся именно к данному объекту. Одно и то же слово может соответствовать нескольким объектам. Например, в игре может быть несколько объектов, любой из которых можно будет назвать ящиком. Кроме того, одно и то же слово может встречаться в списках для разных частей речи (это в большей степени актуально для английского языка, хотя в русском тоже можно подобрать такие случаи). Например, у вас в игре один объект (точнее, персонаж) может называться "безнадежный больной", а другой - "больной зуб". При этом слово "больной" в одном случае будет использоваться как прилагательное, а в другом - как существительное. Кроме того, можно определить для объекта более одного слова. В большинстве случаев понадобится определять для объекта несколько синонимов. Синонимы просто перечисляются в строку без запятых для каждого определения. Например, если в вашей игре присутствует брошюра, ее можно будет определить так: - Код:
-
booklet: item location = startroom sdesc = "брошюра" ldesc = "Это тонкая брошюра, озаглавленная \"TADS - комментарии разработчиков\"." noun = 'брошюра' 'брошюры' 'брошюре' 'брошюру' 'брошюрой' 'брошюре#d' 'брошюрой#t' 'буклет' 'буклета' 'буклету' 'буклетом' 'буклете' 'буклету#d' 'буклетом#t' 'комментарии' 'комментариев' 'комментариям' 'комментариями' 'комментариях' 'комментариям#d' 'комментариями#t' adjective = 'tads' 'tads#r' 'тонкая' 'тонкой' 'тонкую' 'тонкой#d' 'тонкой#t' 'тонкий' 'тонкого' 'тонкому' 'тонким' 'тонком' 'тонкому#d' 'тонким#t' 'разработчиков' 'разработчиков#r' ;
Для каждого синонима (как существительных, так и прилагательных) следует определять все падежные формы, а также служебные значения с суффиксами #d и #t. Кроме того, если используемые синонимы-существительные (в нашем случае "брошюра" и "буклет") имеют разный род, то для прилагательных следует определять формы для каждого используемого рода (в нашем случае "тонкая" и "тонкий"). Наконец, для словосочетаний вроде "комментарии разработчиков" слово, стоящее вторым (и выполняющее роль поясняющего для основного первого слова), необходимо занести в список значений свойства adjective (несмотря на то, что это слово является, вообще говоря, существительным), продублировав его служебным значением с суффиксом #r (см. пример). Необходимость данных действий опять-таки вызвана тем, что TADS изначально ориентирован на английские грамматические конструкции. Еще раз подчеркнем, что все слова в каждом из списков заключены в одинарные кавычки. Если вы определили брошюру так, как показано выше, то игрок сможет обращаться к ней, используя словосочетания "тонкий буклет", "тонкая брошюра", "брошюра TADS", "комментарии разработчиков", а также любые другие комбинации существительных и прилагательных, встречающихся в определении. У любой воспринимаемой СА команды существует набор методов, которые она вызывает для тех объектов, которые участвуют в команде. Когда игрок вводит команду, состоящую из глагола и существительного, СА на основании введенного глагола определяет названия методов, которые требуется вызвать, и затем вызывает эти методы для объекта, определяемого существительным. Следует сказать, что в английском языке форматные строки применять намного проще из-за того, что в английском гораздо меньше форм для каждого слова (за счет сокращенного числа падежей, почти полного отсутствия изменения окончаний глаголов при спряжении и т. п.). Поэтому, например, там, где в английском можно обойтись определением одной форматной строки (скажем, для местоимения "you"), в русском приходится учитывать также все падежные формы (ты, тебе, тебя и т. д.). Окончаний глаголов существует также несколько видов - в зависимости от спряжения, а также времени. Поэтому при последовательной реализации форматных строк в руской игре немудрено в них запутаться, да в общем-то данная функция и не стоит таких трудов. Следует также учитывать одну особенность: для английского языка механизм форматных строк автоматически выбирает строчные или заглавные буквы в зависимости от того, с какой буквы написана форматная строка (например, если для персонажа имеется определение fmtYou="he", и имеется форматная строка "%You% drop%s% the box", то для данного персонажа будет выведено "He drops the box."). В русском языке это не работает, и форматные строки %ты% и %Ты% будут восприниматься, как относящиеся к разным словам. |
|
| | | mia V.I.P.
Сообщений : 184
Репутация : 7
| mia | :: Вт Фев 24 2009, 14:49 | Вт Фев 24 2009, 14:49 | |
| Одной из особенностей TADS, придающей этой системе особую гибкость, является тот факт, что здесь отсутствуют "встроенные" глаголы; все глаголы определены в библиотеке advr.t, а не в исходном коде самой системы TADS, и поэтому автор игры может заменять, удалять, переопределять любые глаголы, ну и, конечно, добавлять новые. TADS позволяет определять три базовых типа команд: команды, которые состоят только из глагола, как, например, "смотреть" или "прыгнуть"; команды, состоящие из глагола и объекта, на который направлено действие (так называемый "прямой" объект) ("взять книгу", "зажечь фонарь"); наконец, команды, состоящие из глагола, "прямого" объекта и второго, вспомогательного или "косвенного" объекта ("положить мяч в коробку", "протереть стекло тряпкой"). Один и тот же глагол может использоваться в разных типах команд; например, можно определить команды "запереть дверь" и "запереть дверь ключом". Для команд первого типа, состоящих только из глагола, вся их реализация сводится к модификации класса deepverb. Вы определяете все действия, выполняемые по такой команде, в методе под названием action объекта-потомка deepverb. Например, определить команду "свистнуть", которая просто выводила бы сообщение, можно следующим образом: - Код:
-
whistleVerb: deepverb verb = 'свистнуть' 'свистеть' 'свистни' 'свистните' 'свисти' 'свистите' sdesc = "свистнуть" action(actor) = { "Засунув четыре пальца в рот, ты громко свистишь, раздувая щеки. Эх, денег у тебя все-таки не будет!"; } ;
Именно наличие у объекта-глагола метода action позволяет использовать соответствующий глагол самостоятельно, без каких-либо других объектов. Если определить объект-потомок класса deepverb без этого метода, то СА при вводе глагола попросит игрока указать "прямой" объект, поскольку будет считать, что этот глагол нельзя использовать самостоятельно (вообще-то, строго говоря, СА запросит игрока только в случае, если для глагола определен атрибут doAction или ioAction - см. далее; в противном случае просто будет выдано сообщение об ошибке). Также следует обратить внимание на то, что в данном примере для свойства verb глагола определено не только слово "свистнуть", но и его формы в повелительном наклонении, а также синоним - также со всеми формами. Принцип тут такой же, как и при определении лексических свойств для существительных: чем больше форм и синонимов вы определите, тем "умнее" будет игра. Для второго типа команд, состоящих из глагола и "прямого" объекта, также потребуется создать объект-потомок класса deepverb; однако, действия при этом выполняются не самим глагольным объектом, а "прямым" объектом, участвующим в команде. В этом случае объект-потомок deepverb служит для того, чтобы информировать СА о существовании соответствующего глагола, а также о порядке обработки объекта - определение такого объекта-глагола должно содержать свойства verb и doAction. doAction - это специальное свойство, которое сообщает системе, что глагол может использоваться с "прямым" объектом, а также определяет название верификатора и метода-действия для этого глагола. Это работает примерно так: вы присваиваете свойству doAction объекта-потомка deepverb некое значение строкового типа (т. е. заключенное в одинарные кавычки). Добавляя к этому значению приставку 'verDo', СА получает название метода-верификатора, а 'do' - метода действия. Если, к примеру, вы определяете команду "ругаться" (на кого-либо), и указываете для соответствующего объекта-глагола doAction = 'Railat', то метод-верификатор для этой команды будет носить название verDoRailat, а метод-действие - doRailat. Определение самого глагольного объекта может выглядеть, например, так: - Код:
-
railatVerb: deepverb sdesc = "ругаться на" verb = 'ругаться на' doAction = 'Railat' ;
Если игрок введет команду "ругаться на продавщицу", то СА сначала вызовет метод-верификатор verDoRailat для объекта, соответствующего продавщице, чтобы проверить, что команда к ней применима; если этот верификатор для данного объекта определен и его выполнение закончилось с положительным результатом (т. е. на экран не было выведено никаких сообщений), то СА затем вызывает метод doRailat, который и выполняет все необходимые действия. В этом примере стоит обратить внимание еще на пару вещей. Во-первых, значение лексического свойства verb определено с использованием двух слов. Это характерно только для свойства verb - ни для каких других лексических свойств (noun, adjective, preposition...) так делать нельзя. Если вы определяете глагол с использованием двух слов, то должны разделить эти слова пробелом, при этом второе слово должно быть определено как предлог (т. е. соответствующее ему значение должно содержаться в списке для лексического свойства preposition (предлог) одного из объектов). Если это не сделано в файле advr.t, вам следует включить соответствующее определение в свою игру. Использование глаголов, состоящих из двух слов - это "тяжелое наследие" изначальной ориентации TADS на английский язык. В английском предлоги могут зачастую кардинально изменять смысл глагола (например, глагол pick имеет значения "ковырять", "клевать", "выбирать", а глагол pick up - "поднимать", "брать"). Кроме того, для английского языка характерна конструкция, совершенно недопустимая в русском - когда предлог "заносится" в конец предложения; например, команды "pick up key" и "pick the key up" совершенно равнозначны и означают "взять ключ". В русском языке, в принципе, можно было бы реализовать анализ глаголов с предлогами по-другому, однако это потребовало бы значительно больших трудозатрат, которые в общем-то не очень нужны, поскольку и "английский" вариант вполне работоспособен; главное - не забывать соответствующим образом определять глаголы, которые сочетаются с существительными посредством предлогов, например, "перепрыгнуть через", "навести на", "выстрелить в". Второе, на что следует обратить внимание - это использование заглавных букв в строковом значении свойства doAction. По соглашениям, принятым в файле advr.t, с заглавной буквы всегда начинается часть строки, соответствующая имени глагола; название предлога иногда тоже пишется с большой буквы, но только для глаголов, использующих "косвенный"объект. Например, в advr.t определено свойство ioAction для глагола "дать" в виде GiveTo, поскольку английский предлог "to" в данном случае является связкой между командой и "косвенным"объектом (в команде вида "дать деньги продавцу"; в русском языке этот предлог заменяется падежом, однако в процессе обработки команды СА в RTADS все равно используется внутреннее представление с использованием предлога - этот вопрос будет подробнее рассмотрен далее). Для нашего глагола "ругаться" "косвенный" объект не нужен, поэтому мы пишем название предлога (в данном случае русскому предлогу "на" соответствует английский "at") со строчной буквы. |
|
| | | mia V.I.P.
Сообщений : 184
Репутация : 7
| mia | :: Вт Фев 24 2009, 14:50 | Вт Фев 24 2009, 14:50 | |
| Синтаксический анализатор TADS совместно со стандартной библиотекой (advr.t) задают несколько взаимосвязанных принципов, определяющих, какие объекты игрок может использовать в своих командах. Набор объектов, к которым может обращаться игрок, меняется от хода к ходу, поскольку с каждым ходом может меняться местоположение игрока и состояние объектов; кроме того, этот набор может зависеть и от конкретной команды, даваемой игроком, поскольку разные команды предъявляют различные критерии к объектам. Функции, специфичные для русского языкаkpstok (mrod,grod, chislo)Добавляет русские окончания кратким причастиям страдательного типа(kratkogo prichastiya stradatelnogo typa okonchanie). Например, ОТКРЫТ(Ы,А,О). Пол нужно указывать каждой новой вещи самому в главном игровом файле. Если мужской и женский род не указаны, или указаны оба - используется средний. Использовать не советую, так как функция yao(obj) гораздо более удобна в использовании, и даёт тот же результат. Единственный случай, когда она может вам понадобиться - необходимость передать род и число от различных объектов. Отчего может возникнуть такая необходимость - совершенно не представляю, и потому функцию kpstok можно считать чистейшим атавизмом. glok (obj, sprag, type)Добавляет русские окончания глаголам(glogolnoe okonchanie). В параметрах требуется указывать спряжение (1/2). Тип — это со звуком "й" окончание или нет. С "й" — это второй (1/2). С 18 релиза функция больше не принимает свойства lico и chislo отдельно, а находит эти свойства у переданного в качестве параметра объекта obj. Функция работает верно для всех параметров, кроме единственного числа первого лица("Я"), т.к. в этом случае некоторые глаголы меняются более существенно. Число Лицо Первое спряж Второе спряж Ед 1-л у ю у ю 2-л ешь ёшь ишь ишь 3-л ет ёт ит ит Мн 1-л ем ём им им 2-л ете ёте ите ите 3-л ют ут ат ят glsok (ca, mrod,grod,chislo)Это функция для окончаний прошлого времени глаголов. Параметр "ca" определяет вид окончания глагола в прошедшем времени. Рекомендую вместо неё использовать функции iao(obj), saas(obj) и ella(obj). ca=0 даёт (и; нулевое, а, о) ca=1 даёт (ись; ся, ась, ось) ca=2 даёт (ли; ёл, ла, ло) ZA (str)Изменяет первую букву слова на заглавную. Работает только для строк, заключенных в одинарные кавычки, типа: 'пень'. dToS (obj, prop) Ловит текст из строки с двойными кавычками и преобразует в одноковычный(double-quoted string to single-quoted string). Работает только для свойств объектов. Нужно для последующей обработки свойств, содержащих текст в двойных кавычках, например ldesc. Параметр obj — это имя объекта, prop — ссылка на свойство объекта. Например a:=dToS(Me,&sdesc) присвоит переменной "a" значение имени героя "Me" в одинарных кавычках. Функция предоставлена Майком Робертсом. ZAG (obj, prop)Данная комбинация функции ZA и dToS позволяет взять свойство prop у объекта obj, сделать первую букву заглавной, и вывести результат на экран. Например: ZAG(Me, &vdesc), выведет имя главного персонажа в винительной форме и начинающееся уже с заглавной буквы. ok (obj, textIfIsThem, textIfIsHim, textIfIsNeuter, textIfIsHer )Эта универсальная функция для вывода окончаний появляется начиная с 21 релиза. Она берёт свойства у объекта obj, и в зависимости от них, выводит окончание, выбранное среди четырёх других параметров. Т.е. textIfIsThem, textIfIsHim, textIfIsNeuter, textIfIsHer - текст в одинарных кавычках. Пример: "<<self.sdesc>> развернул<<ok(self,"ись","ся","ось","ась")>>. "; numok ( num, s1, s4, s5 )Функция для подстановки окончаний, зависимых от числа (numerovanyh slov okonchanie). Функцию предложил zverik. Также появляется начиная с 21 релиза s1 — окончание в случае единицы, s4 — от 2 до 4, s5 — от 5 до 9 и для 0. Пример: "Здесь лежит <<sayPrefixCount(num)>> спич<<ok(self,'ка','ки','ек')>>. "; yao (obj)Эта функция призвана заменить функцию kpstok и упростить её использование. Вместо того, чтобы требовать все необходимые параметры отдельно, yao принимает объект как параметр и использует его свойства пола и числа. "yao" является транскрипцией "ыао" - тех букв, которые функция должна выводить в зависимости от свойств предмета. Аналогично названы и последующие функции, что должно помочь их запоминанию. iao (obj)Сходно с yao, но вместо буквы "ы" во множественном числе выводится "и". saas (obj)Выводит окончания "ись", "ся", "ось", "ась". ella (obj)Выводит окончания "ли", "ёл", "ло", "ла". oyay (obj)Выводит окончания "ые", "ой", "ое", "ая". dezyo (str)Заменяет все буквы "ё" в строке str на "е". loweru (str)Переводит все русские заглавные буквы, встреченные в строке str, в прописные. Если Вам не нравятся названия каких-либо из этих функций, то их легко изменить подобным образом: - Код:
-
MyFunctionName: function(obj, sprag, type) { glok(obj, sprag, type); } |
|
| | | mia V.I.P.
Сообщений : 184
Репутация : 7
| mia | :: Вт Фев 24 2009, 14:51 | Вт Фев 24 2009, 14:51 | |
| Правила создания объектовВ русском языке имена существительные склоняются, поэтому для того, чтобы игра правильно оперировала названием предмета, требуется указывать все формы во всех падежах. У всех объектов есть свойства sdesc, rdesc, ddesc, vdesc, tdesc, pdesc, соответствующие формам соответственно Именительного, Родительного, Дательного, Винительного, Творительного и Предложного падежей. Именительный Кто, Что Родительный Кого, чего Дательный Кому, чему Винительный Кого, что Творительный Кем, чем Предложный О Ком, о чем Падежные формы используются, чтобы система правильно произносила названия предметов, однако для того, чтобы система правильно понимала формы слов, вводимых игроком, этого не достаточно. Чтобы парсер понимал формы вводимые игроком нужно включить все формы в свойство 'noun': - Код:
-
yezhik : thing location = throne sdesc = "любимый плюшевый ёжик короля" rdesc = "любимого плюшевого ёжика короля" ddesc = "любимому плюшевому ёжику короля" vdesc = "любимый плюшевый ёжик короля" tdesc = "любимым плюшевым ёжиком короля" pdesc = "любимом плюшевом ёжике короля" adjective = 'любимый' 'любимого' 'любимому' 'любимым' 'любимом' 'плюшевый' 'плюшевого' 'плюшевому' 'плюшевым' 'плюшевом' 'короля' noun = 'ежик' 'ежика' 'ежику' 'ежиком' 'ежике' ldesc = "Любимый плюшевый ёжик короля. " isHim = true ; Есть еще одна тонкость - для того, чтобы парсер понимал предложения типа «ударить гоблина телефоном», в смысле «ударить гоблина с помощью телефона» нужно в список свойства noun добавить форму с суффиксом «#t»; чтобы была понятна фраза «дать арахис слону» добавить форму с суффиксом «#d» соответственно, а чтобы был понят «кусок мяса»(определение после существительного), помимо 'мяса' в список adjective необходимо ввести 'мяса#r'. Например: - Код:
-
yezhik : thing location = throne sdesc = "любимый плюшевый ёжик короля" rdesc = "любимого плюшевого ёжика короля" ddesc = "любимому плюшевому ёжику короля" vdesc = "любимый плюшевый ёжик короля" tdesc = "любимым плюшевым ёжиком короля" pdesc = "любимом плюшевом ёжике короля" adjective = 'любимый' 'любимого' 'любимому' 'любимому#d' 'любимым' 'любимым#t' 'любимом' 'плюшевый' 'плюшевого' 'плюшевому' 'плюшевому#d' 'плюшевым' 'плюшевым#t' 'плюшевом' 'короля' 'короля#r' noun = 'ежик' 'ежика' 'ежику' 'ежиком' 'ежике' 'ежику#d' 'ежиком#t' ldesc = "Любимый плюшевый ёжик короля. " isHim = true ; Полезные методыДля каждого из объектов наследуемых от thing, определен ряд полезных свойств и методов, которые могут помочь формировать сообщения, в которых упоминаются заранее не определённые объекты. К таким методам и свойствам можно отнести и набор sdesc, rdesc, ... В английском языке были определены методы вывода объектов с артиклями, но в результате перевода они совершенно исчезли. Вместо них были добавлены другие, характерные для русского языка. itobjdesc Выводит "их","её","его", в зависимости от пола и числа объекта. ritobjdesc Выводит те же местоимения, но в родительном падеже. Аналогично работают ditobjdesc, titobjdesc и pitobjdesc, а vitobjdesc отсутствует, т.к. в данном случае совпадает с itobjdesc. itselfdesc Выводит "них самих же", "него же", "неё саму же" или "него же", в зависимости от объекта. disamvdesc Свойство disamvdesc представляет собой винительный падеж объекта, используемый в случае разъяснения объекта. Используется только тогда, когда вы не хотите отображать прилагательные в составе названия. Пример: - Цитата :
- >инв
Ты несёшь:стул >взять стул Который стул Вы имеете в виду: стул или высокий стул? >стул Который стул Вы имеете в виду: стул или высокий стул? и т.д. Т.е. здесь мы никогда стул не возьмём. добавляем стулу vdesc="обычный стул" >инв Ты несёшь: обычный стул То, что слово "обычный" видно всегда, может быть очень некрасиво или преждевременно выдавать информацию о предмете. После добавления стулу disamvdesc="обычный стул": - Цитата :
- >инв
Ты несёшь:стул >взять стул Который стул Вы имеете в виду: обычный стул или высокий стул? Методы, определённые для глаголовvopr Задаёт вопрос для вывода в том случае, если не указан прямой объект. По умолчанию равен "Что "."[vopr] Вы хотите [глагол]?". pred Указывает предлог для корректного вывода сообщения "Я не знаю как [глагол] [предлог] [объект]". type Указывает на поддержку глаголом косвенных объектов в падеже без предлога. Значение 1 означает творительный, 2 - дательный, 3 - оба падежа. Например, чтобы фраза "открыть дверь ключом" была понята, необходимо не только задать 'ключом#t' в список noun объекта ключа, но и присвоить свойству type глагола "открыть" значение 1. Ссылки:- RTADS
Cайт посвящён текстовым играм и главным образом - русифицированной версии известной системы для программирования текстовых игр под названием TADS (Text Adventure Development System).
- IFiction.ru - бывший Taplap.ru, он же Opus&Lapsus
Значение этого сайта, а главное - его форума, нельзя недооценить. Большое количество материалов по IF.
- IF-wiki.RU
Название говорит само за себя. wiki российского сообщества любителей интерактивной литературы и текстовых игр.
- Домашняя страница ifn00b
Страница автора небольшого ТАДС-квеста "Зебра Федьки Крюкова".
- urq.allquests.ru
Сайт очень оживлённый, но целиком посвящён другому направлению текстовых игр - "Выбери Себе Приключение (CYOA)" или "менюшные игры".
- QSP
Вторая по популярности система для разработки менюшных игр.
- Мир текстовых квестов
Сайт коллектива энтузиастов, продвигающих текстовые игры. К сожалению, пока у них нет готовых проектов, но учитывая большое рвение и замах, они не за горами. Тем более, что у них есть финансовая поддержка. С текущей ситуацией в русском сообществе они знакомы мало, но будем надеятся, что те "Урочники", которых они принимают в свои ряды, их просветят.
- Домашняя страница Wizard-Nash'а
Здесь можно узнать о проекте "Inspire" (библиотеки для создания IF в среде Delphi), а также прочитать ряд статей.
- Сайт Кащея
Останки некогда самого амбициозного из сайтов, посвященных текстовым играм. Некоторые все ещё приходять сюда поклониться этому жутковатому созданию, которому, впрочем, нынешнее IF сообщество и "урочники" многим обязаны.
- Клуб Адвантюристов
Сайт русской версии Adrift. Самая визуальная и, следовательно, простая в использовании система разработки IF. Увы, качество перевода системы оставляет желать лучшего. Хотите програмировать больше, чем писать игру - помогите этому проекту. Хотите писать игру, не умеете програмировать и Вам не слишком важен результат (или вы очень упорный человек) - это система для Вас. К сожалению, сайт заброшен. Перед тем как отойти от дел, автор заинтересовалась ТАДСом.
|
|
| | | ASBer Наблюдатель
Сообщений : 1
Репутация : 1
| ASBer | :: Чт Июл 14 2011, 23:48 | Чт Июл 14 2011, 23:48 | |
| В настоящее время идёт разработка парсерной игровой платформы ТОМ. В отличии от RTADS платформа изначально создаётся под русский язык. Форум Ifwiki Блог
Первая версия платформы заморожена в стадии бета. Для неё можно скачать несколько игр. Основной недостаток этой версии - очень большая трудоёмкость создания игр.
Вторая версия активно разрабатывается и подаёт надежды. Можно скачать альфу и ознакомиться с демо-примерами.
Заходите, вам всегда рады.
P.S. ТОМ рекомендуется использует с голосом "Николай", установленным как основной голос Windows. |
|
| | | | Система разработки интерактивной литературы на русском языке | |
| Система разработки интерактивной литературы на русском языке |
---|
| |