Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
27.12.2007 22:46

tadsloser
Участник
Зарегистрирован: 27.12.2007
Сообщений: 16

Рационализаторское предложение

Появление хороших IF на русском:  «Ожидание утра»,  «Дримор», «Оружие Ли Гуана», подвигло меня на эксперименты с системой - на которой эти игры были написаны - RTADS.

В ходе первоначального знакомства с системой обнаружилось, что описание падежных форм занимает некоторую часть времени разработки (трудно судить какую, игр я не писал), и, что более неприятно – ведет к засорению и разбуханию кода.

Да, генераторы GrAnd-а и FighteR-а хорошо справляются со своей задачей (последний чуть лучше), а именно – с генерацией падежных форм. Но в связке с RTADS использовать генераторы не очень-то удобно, кроме того, они не решают проблемы разбухания кода.

В связи с вышесказанным у меня возникло несколько идей-тем к размышлению. Возможно все это - банальности (или даже бред:), что можно объяснить тем, что
с RTADS я познакомился чуть больше недели назад.

Итак, очень бы хотелось писать
noun = 'стул' 'табурет' (или даже noun = 'стул'), а RTADS
понимала бы как
noun ='стула' 'стулу' 'стул' 'стулом' 'стуле' 'стулу#d' 'стулом#t'
          'табурета' 'табурету' 'табурет' 'табуретом' 'табурете'  'табурету#d' 'табуретом#t'

1.) Формат лекс. свойств.

Код:

// использует addword(…) и, возможно, external_generator(…)
generator: function(obj);

// внешний генератор
external_generator: external function(…);

sample: object
noun = 'стул#мену' 'табурет#мену'
// где м – мужской, е – ед. число, н – неодуш., у – ударение на посл. слог.

// …

// где-то дальше вызывается generator(self)
;

Здесь есть проблема - где и когда вызывать generator(self), и вообще, возможно ли это?

Подобное можно провернуть и с sdesc, задав свойства rdesc, ddesc и т.д. с произвольными значениями в базовом классе и добавив соответствующую функциональность в generator.

2.) Псевдо-препроцессорная обработка (во словцо придумал:).

Что-то вроде:
forms game.t > game_with_forms.t

Где forms – консольный римейк генератора GrAnd-а или FighteR-а, заменяющий строки вида
noun = 'стул#мену' 'табурет#мену'
на 
noun ='стула' 'стулу' 'стул' 'стулом' 'стуле' 'стулу#d' 'стулом#t'
          'табурета' 'табурету' 'табурет' 'табуретом' 'табурете' 'табурету#d' 'табуретом#t'

и добавляющий rdesc, ddesc и т.д.

Этот подход можно применить и для генерации синонимов (конечно не основных, а «страховочных»).
Хотя здесь не меньше трудностей: необходимость в хорошем словаре, всевозможные глюки (например, герой заходит в комнату, где находится родник, неся с собой ключ) и т.д.

P.S.
Все это тема к размышдению, т.е. достаточных знаний RTADS и морфологии, для реализации всего этого, у меня нет:)

Неактивен

0    0    #2
28.12.2007 10:56

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Рационализаторское предложение

Последняя версия генератора, которую я, к сожалению, так и не выпустил была полностью переписана с использованием регулярных выражений. ТАДС их поддерживает, и потому генератор можно впихнуть в игру. Вот только он не всегда правильно генерит формы. Например, слово пес или заяц. Если не проверять результат при добавлении лексемы, можно нажить себе много хлопот при тестировании.

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru