Появление хороших 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 и морфологии, для реализации всего этого, у меня нет:)
Неактивен
На самом деле, к RTADS вполне можно прикрутить настоящий морфоанализатор. Правда, его придется таскать с собой.
Я писал об этом здесь: http://rtads.org/f1/viewtopic.php?t=1191
Или можно сделать что-то вроде препроцессора, который обрабатывает описания в исходнике и отдает их компилятору TADS уже со всеми словоформами...
А синонимы - это отдельная задача...
Неактивен