Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
05.12.2007 15:13

goraph
Участник (+647, -223)
Зарегистрирован: 16.04.2007
Сообщений: 531

Основная добродетель гражданина есть недоверие.

Два одинаковый предмета

Хм, столкнулся с проблемой. У протагониста уже есть предмет, пусть "пузырек с ядом". Исследуя отдаленные районы квеста он находит второй точно такой же "пузырек с ядом". Предметы по идее абсолютно идентичны (массовое производство приводит к этому), более того это контейнеры, и их содержимое отличается (в одном из пузырьков на самом деле простая вода), однако об этом нельзя узнать, если не попробовать (а умный протагонист не станет пить из пузырька с ядом, чтоб не почувствовать легкого недомогания).
Собственно есть ли выход из ситуации:
   Вы имеете в виду "пузырек с ядом" или "пузырек с ядом"?
Кроме как поменять сценарий? smile
Самое страшное - таких предметов на самом деле на два, а четыре smile

Неактивен

0    0    #2
05.12.2007 17:07

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Два одинаковый предмета

Предложу теоретическое решение, без кода.

При первом нахождении 2-го, 3-го и 4-го пузырька нужно изменять их лексические свойства на "второй пузырек", "третий ..," и т.д., в зависимости от того, сколько пузырьков игрок уже нашел.
Нужно создать где-нибудь счетчик найденных пузырьков, у самих пузырьков прописать флаг "найден", а в метод doTake вставить проверку этого флага и изменение описания пузырьков.
Также при нахождении первого альтернативного объекта нужно давать нумерацию и первому экземпляру ("первый пузырек").

Или можно менять лексические свойства пузырьков в зависимости от того, что в них находится. Например, изначально в пузырьке налита вода. Называется оно "Пузырек с водой". Если игрок извлечет воду, пузырек станет называться "[Первый/второй/третий/четвертый] пустой пузырек". Нумерация должна появляться, если пустых пузырьков несколько, что несложно проверить.
Как только игрок зальет туда, скажем, водку, по методу doFill (или как там он называется) у пузырька опять изменятся лексические свойства и он станет "Пузырек с водкой".

Отредактировано Hind (05.12.2007 17:09)

Неактивен

0    0    #3
05.12.2007 17:37

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

меньше слов

Re: Два одинаковый предмета

Есть класс нумерованных предметов - numberedObject. Никогда не использовал, но судя по описанию, может подойти.
Указанный метод тоже может пройти, но только сам подумай - если они одинаковые, как их различает ГП?

Неактивен

0    0    #4
05.12.2007 18:34

goraph
Участник (+647, -223)
Зарегистрирован: 16.04.2007
Сообщений: 531

Основная добродетель гражданина есть недоверие.

Re: Два одинаковый предмета

Hind, спасибо, очень интересный вариант
Гранд, с этим как раз и проблемы - дело не в практическом решении, я не могу придумать как их будет различать игрок. В идеале, если игрок ложит эти пузырьки в разные контейнеры (например один в карман, а другой в сумку), или просто не берет одновременно два в руку (например выкладывает пузырьки попеременно в разных локациях), то он должен быть в состоянии их различить, так как они не перепутаются. Но нужна возможность обратиться к каждому из них в отдельности. Если этого не делать, то протагонист сможет отравить всех вокруг из пузырька в котором, как окажется в конце игры, был не яд а вода.

Неактивен

0    0    #5
05.12.2007 19:04

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Два одинаковый предмета

Кстати, сделал пару "пузырьков". При вводе "пузырек с ядом" пишет: Какой "пузырек of ядом" вы имеете ввиду?

Проблема, видимо, в том что в процедуру разбора несостыковок передается уже преобразованная строка с предлогом 'of' нужная для английского разборщика. Как бы это обойти. А вызывается она, как я понял, уже напрямую из интерпертатора?

Код:

parseDisambig: function(str, lst, ...)      //Вместо 100-104 кодов ошибок
{
   local i, tot, cnt;
   "Котор";
   if (lst[1].isactor) ok(lst[1],'ых','ого','ое','ую'); else
    if (lst[1].isThem) "ые"; else
     if (lst[1].gender=1) "ый"; else
      if (lst[1].gender=2) "ую"; else "ое";
   " \"<< str >>\" Вы имеете в виду: ";
   for (i := 1, cnt := length(lst) ; i <= cnt ; ++i)
   {
      if (dToS(lst[i],&vdesc)!=str) lst[i].vdesc; else lst[i].disamvdesc; 
      //кстати, в чем смысл этой строки? Может сразу выводить только disamvdesc?
      if (i < cnt - 1) ", ";
      if (i + 1 = cnt) " или ";
   }
   "?";
}

PS Что за многоточия в аргументах функции? Это что-то вроде необязательных параметров или как?

Отредактировано - VampirE - (05.12.2007 19:46)

Неактивен

0    0    #6
05.12.2007 20:30

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Два одинаковый предмета

В общем, вот, что можно сделать со свойством disamvdesc:


Код:

puzyryek1 : item
    location = startroom
    sdesc = "пузырек c ядом"
    rdesc = "пузырка c ядом"
    ddesc = "пузырку c ядом"
    vdesc = "пузырек c ядом"
    tdesc = "пузырком c ядом"
    pdesc = "пузырека c ядом"
    adjective = 'ядом' 'ядом#r' 'первый'
    disamvdesc = "первый пузырек"
    noun = 'пузырек' 'пузырка' 'пузырку' 'пузырком' 'пузырека' 'пузырку#d' 'пузырком#t'
    ldesc = "Пузырек."
    isHim = true
;

puzyryek2 : item
    location = startroom
    sdesc = "пузырек c ядом"
    rdesc = "пузырка c ядом"
    ddesc = "пузырку c ядом"
    vdesc = "пузырек c ядом"
    tdesc = "пузырком c ядом"
    pdesc = "пузырека c ядом"
    adjective = 'ядом' 'ядом#r' 'второй'
    disamvdesc = "второй пузырек"
    noun = 'пузырек' 'пузырка' 'пузырку' 'пузырком' 'пузырека' 'пузырку#d' 'пузырком#t'
    ldesc = "Пузырек."
    isHim = true
;

Правда, при этом в фун-ии parseDisambig пришлось строку

Код:

if (dToS(lst[i],&vdesc)!=str) lst[i].vdesc; else  lst[i].disamvdesc;

заменить на

Код:

lst[i].disamvdesc;

иначе disamvdesc отображаться не хочет.

Отредактировано - VampirE - (05.12.2007 20:30)

Неактивен

0    0    #7
05.12.2007 21:31

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

Re: Два одинаковый предмета

- VampirE - написал:

PS Что за многоточия в аргументах функции? Это что-то вроде необязательных параметров или как?

Да, это именно они и есть.

Неактивен

0    0    #8
05.12.2007 22:09

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Два одинаковый предмета

Ух ты, а я и не знал про disamvdesc smile
Главное, следить, чтобы игрок не получал ответов типа: "Вы имеете в виду первый пузырек с йадом или четвертый пузырек с йадом?", когда он встретил в игре всего два... big_smile
Я к тому, что нумеровать их надо в порядке нахождения, даже если игрок может найти их в произвольном порядке.

Кстати, похоже, динамическое нумерование должно происходить не в doTake, а в момент первого появления в поле внимания игрока - иначе он просто не сможет взять его: в инвентаре будет "Пузырек с йадом", в шкафу тоже будет "Пузырек с йадом".
Возникает вопрос - а есть ли универсальный, который будет вызываться при первом появлении объекта в кадре?

Для объектов, явно перечисляемых движком при осмотре комнаты (isListed) это, очевидно, vdesc.
С остальными, похоже, нужно разбираться индивидиуально.

Неактивен

0    0    #9
05.12.2007 22:34

goraph
Участник (+647, -223)
Зарегистрирован: 16.04.2007
Сообщений: 531

Основная добродетель гражданина есть недоверие.

Re: Два одинаковый предмета

Здорово, я тоже не знал про disamvdesc smile Спасибо Вампир, это свойство похоже должно решить все мои проблемы с йадом smile
Кстати, даже если игрок встретил в игре всего два или три пузырька, то он может догадаться написать "взять четвертый пузырек с ядом" и узнать есть ли такой в игре предмет по ответу ртадса

Неактивен

0    0    #10
05.12.2007 23:00

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Два одинаковый предмета

goraph написал:

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

Так в том и фишка, что "четвертый пузырек" окажется четвертым и получит такое имя и лексические свойства (которые позволили бы к нему так обратиться) только после его нахождения. )))
Я сейчас как раз пишу код для этого )

Коварно, зато правдоподобно (думаю, я бы тоже, найдя по очереди несколько одинаковых пузырьков, начал бы называть их "первый", "второй" и т.п., сделав какие-нибудь метки для простоты) и защищает от спойлера.

Неактивен

0    0    #11
05.12.2007 23:14

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

меньше слов

Re: Два одинаковый предмета

С нумерацией все понятно - лучше всего вводить в момент входа в локацию с пузырьком (вбить скрипт в функцию осмотра комнаты). Впрочем, дело вкуса.
А вот нумерация может появляться если у игрока в кармане есть маркер. Это даже можно сделать пазлом. А ещё, актер может отказываться брать пузырек, мотивируя риском ошибки. Тут очень много вариантов, которые могут сделать игру только интереснее!

Неактивен

0    0    #12
05.12.2007 23:25

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Два одинаковый предмета

GrAndrey написал:

А вот нумерация может появляться если у игрока в кармане есть маркер. Это даже можно сделать пазлом. А ещё, актер может отказываться брать пузырек, мотивируя риском ошибки. Тут очень много вариантов, которые могут сделать игру только интереснее!

Ага, я уже думал об этом. "Я могу случайно перепутать пузырьки, так что лучше пока его не брать."

Меня сейчас интересует, как изменить свойство adjective... Что оно вообще такое? Ему ничего не присваивается, оно только задается при создании объекта...

Неактивен

0    0    #13
05.12.2007 23:44

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Два одинаковый предмета

А вот еще пример: игрок встречает какого-то персонажа. Так как его имени он не знает, то может обращаться к нему как "человек" и т.д. А вот если персонаж узнает имя собеседника, возможно ли потом изменять значение переменных с падежами vdesc, pdesc и т.д. на имя персонажа?

Ну что? Кто-то знает как избежать смены предлога на "of"? Когда Гранд писал о "некоторых экзотических случаях" он это имел ввиду? wink

Отредактировано - VampirE - (05.12.2007 23:46)

Неактивен

0    0    #14
06.12.2007 00:46

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

меньше слов

Re: Два одинаковый предмета

Пример манипуляций с лексемами и пару других фишек из Дримора.

Код:

class monster: Actor,living
...
death(killer)=               //  !!!!!!!!!!!!!!! DEATH !!!!!!!!!!!!!!!
{
// создаем объект класса "труп"
 local corp := new trup;
// список существительных
 local nnouns:=[];
// список прилагательных и пара переменных
 local adj:=[],z,i;

// вынос трупа на сцену
 corp.moveInto(self.location);
// уносим актера
 self.moveInto(nil);
//обозначаем кем был этот труп
 corp.monstr:=self;
// вес трупа зависит от макс хитов хозяина
 corp.weight:=self.mhp/4;
// сообщение о смерти в зависимости от персонажей, оружия и оверкила
 killer.curweapon.killmess(killer,self,self.hp*(-1));
// скока лута в актере
 z:=length(self.contents);
// перебрасываем лут в труп
 for(i:=1; i<=z;i++) self.contents[1].moveInto(corp);
// берем список имен погибшего
 nnouns:=getwords(self, &noun);
// присваиваем их свежему трупу
 for (i:=1;i<=length(nnouns);i++) addword(corp,&noun,nnouns[i]) ;
// собираем список прилагательных
 adj:=getwords(self, &adjective);
// их тоже приписываем тушке
 for (i:=1;i<=length(adj);i++) addword(corp,&adjective,adj[i]) ;
// тельце будет отзывается на "он, она, оно" по обстоятельствам
// ударить его -> Злодей умер -> ударить его -> Он уже мертв.
 setit(corp);
}
;

class trup: surface        //!!!!!!!!!!!!!!!!!Trup!!!!!!!!!!!!!!!!
...
monstr= nil
sdesc ="труп <<monstr.rdesc>>"
...
pdesc ="трупе <<monstr.rdesc>>"
noun ='трупа' 'трупу' 'трупу#d' 'труп' 'трупом' 'трупом#t' 'трупе'
      'тело' 'тела' 'телу' 'телу#d' 'телом' 'телом#t' 'теле' 
adjective='трупа' 'трупа#r'  
isHim = true
;

По аналогии с addword() работает и delword()

Неактивен

0    0    #15
06.12.2007 05:14

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

Re: Два одинаковый предмета

Hind написал:

Меня сейчас интересует, как изменить свойство adjective... Что оно вообще такое? Ему ничего не присваивается, оно только задается при создании объекта...

adjective - это лексическое свойство-прилагательные, соответственно. Проще говоря, оно определяет набор прилагательных (или существительных-определительных), с помощью которых игрок может обращаться к объекту. Для изменения лексических свойств (добавления/удаления) используются функции addword/delword. Далее см. в мануале (в "Справочнике по языку программирования" или, по-моему, где-то есть в главах про парсер - что-то вроде "Динамический словарный запас").

Отредактировано uux (06.12.2007 06:10)

Неактивен

0    0    #16
06.12.2007 06:08

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

Re: Два одинаковый предмета

- VampirE - написал:

Ну что? Кто-то знает как избежать смены предлога на "of"? Когда Гранд писал о "некоторых экзотических случаях" он это имел ввиду? wink

Есть идея (правда, без кода, код предоставляю написать ГрАнду, так как оптимизация системных библиотек - его епархия): в parseDisambig перед выводом запроса просматривать переменную str на предмет вхождения в нее подстроки ' of ' и безжалостно заменять оную на пробел. На мой взгляд, единственная проблема, которая может возникнуть  - это случай, когда в русскоязычной игре активно используются англоязычные словосочетания, но уж это-то совершенно точно экзотика. Других побочных эффектов придумать не могу. Может, ГрАнд меня поправит.

Неактивен

0    0    #17
06.12.2007 06:14

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

Re: Два одинаковый предмета

- VampirE - написал:

А вот еще пример: игрок встречает какого-то персонажа. Так как его имени он не знает, то может обращаться к нему как "человек" и т.д. А вот если персонаж узнает имя собеседника, возможно ли потом изменять значение переменных с падежами vdesc, pdesc и т.д. на имя персонажа?

ГрАндовский пример в принципе дает ответ на этот вопрос, но вот еще одна прямая подсказка: vdesc, pdesc и т. д. - это не переменные, а методы. Соответственно, их можно оформить в виде кусков кода в фигурных скобках и включить туда условные операторы. До остального, думаю, догадаешься сам;).

Неактивен

0    0    #18
06.12.2007 08:10

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Два одинаковый предмета

Есть идея (правда, без кода, код предоставляю написать ГрАнду, так как оптимизация системных библиотек - его епархия): в parseDisambig перед выводом запроса просматривать переменную str на предмет вхождения в нее подстроки ' of ' и безжалостно заменять оную на пробел.

Это-то понятно. Но будет не очень красиво смотреться. По смылсу там все равно должен будет стоять какой-то предлог.

А про методы спасибо. Я даже совсем забыл про это. smile

Неактивен

0    0    #19
06.12.2007 09:48

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 795
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Два одинаковый предмета

goraph написал:

Хм, столкнулся с проблемой. У протагониста уже есть предмет, пусть "пузырек с ядом". Исследуя отдаленные районы квеста он находит второй точно такой же "пузырек с ядом". Предметы по идее абсолютно идентичны (массовое производство приводит к этому), более того это контейнеры, и их содержимое отличается (в одном из пузырьков на самом деле простая вода), однако об этом нельзя узнать, если не попробовать (а умный протагонист не станет пить из пузырька с ядом, чтоб не почувствовать легкого недомогания).
Собственно есть ли выход из ситуации:
   Вы имеете в виду "пузырек с ядом" или "пузырек с ядом"?
Кроме как поменять сценарий? smile
Самое страшное - таких предметов на самом деле на два, а четыре smile

1. А если это будут  зеленый, синий, лиловый, грязный, пузырек с ядом - это повредит сюжету? Они действительно долждны быть совершенно одинаковыми?
2. Пусть игрок догадается чем и как их пометить и это будет пазл, иначе их можно случайным образом путать друг с другом...
Дать ему алмаз или маркер... пусть рисует на пузырьках череп и кости...

Неужели так трудно запомнить: спирт  в пузырьке из под микстуры от кашля с надписью "яд"!!!

Неактивен

0    0    #20
06.12.2007 13:37

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

Re: Два одинаковый предмета

- VampirE - написал:

Есть идея (правда, без кода, код предоставляю написать ГрАнду, так как оптимизация системных библиотек - его епархия): в parseDisambig перед выводом запроса просматривать переменную str на предмет вхождения в нее подстроки ' of ' и безжалостно заменять оную на пробел.

Это-то понятно. Но будет не очень красиво смотреться. По смылсу там все равно должен будет стоять какой-то предлог.

В случае с of это не так.

Эту конструкцию ГрАнд специально придумал для случаев, когда определяющее существительное в родительном падеже следует за определяемым (конструкции вида "дверь гаража", которая будет заменена на "дверь of гаража"). Поэтому тут-то как раз никаких предлогов (с точки зрения русского человека, а не TADS;) не требуется. Больше такое представление, насколько я понимаю, нигде не используется.

To GrAnd: Андрей, поправь меня, если я ошибаюсь.

Неактивен

0    0    #21
06.12.2007 13:39

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

Re: Два одинаковый предмета

AlsoKorwin написал:

1. А если это будут  зеленый, синий, лиловый, грязный, пузырек с ядом - это повредит сюжету? Они действительно долждны быть совершенно одинаковыми?

Я думаю - да, иначе Гор не спрашивал бы;).

Неактивен

0    0    #22
06.12.2007 14:24

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

меньше слов

Re: Два одинаковый предмета

uux написал:

Эту конструкцию ГрАнд специально придумал для случаев, когда определяющее существительное в родительном падеже следует за определяемым (конструкции вида "дверь гаража", которая будет заменена на "дверь of гаража"). Поэтому тут-то как раз никаких предлогов (с точки зрения русского человека, а не TADS;) не требуется. Больше такое представление, насколько я понимаю, нигде не используется.
To GrAnd: Андрей, поправь меня, если я ошибаюсь.

Совершенно верно. ТАДС по умолчанию ожидает увидеть определяемое существительное после прилагательного, и делает исключение лишь при наличии предлога 'of'.  В русском языке на его месте могут быть самые разные предлоги, что задается в specialWords строкой  'of'='для'='против'='типа'='из'='под'='от'='на'='в'='с'. Но предлога может не быть, так как он будет "заложен" в родительном падеже определения.  Для этих случаев создается дополнительная лексема прилагательного с меткой #r. Предпарсер переделывает такие конструкции к виду "существительное для прилагательное" К сожалению, парсер все предлоги приводит к одному коду, и может вернуть только 'of'. Уж коль пошла такая пьянка, то можно сохранть предлоги для дальнейшего использования, но у меня уже голова идет кругом от последних программерских изысков smile

Неактивен

0    0    #23
06.12.2007 14:53

goraph
Участник (+647, -223)
Зарегистрирован: 16.04.2007
Сообщений: 531

Основная добродетель гражданина есть недоверие.

Re: Два одинаковый предмета

AlsoKorwin написал:

1. А если это будут  зеленый, синий, лиловый, грязный, пузырек с ядом - это повредит сюжету? Они действительно долждны быть совершенно одинаковыми?
2. Пусть игрок догадается чем и как их пометить и это будет пазл, иначе их можно случайным образом путать друг с другом...
Дать ему алмаз или маркер... пусть рисует на пузырьках череп и кости...

Неужели так трудно запомнить: спирт  в пузырьке из под микстуры от кашля с надписью "яд"!!!

Не хотелось бы делать разноцветные пузырьки, хотелось бы чтобы игрок думал что в новом пузырьке такой же точно яд, и продолжал его использовать (с на удивление другим эффектом), мог специально подменить их (хотя другие персонажи могут и не отличать зеленый пузырек от лилового) или спутать.
С точки же зрения громоздкости, для игрока разницы между "синим пузырьком" и "вторым пузырьком" вроде нету никакой.
Потому наверное лучше менять названия динамически - сначала когда игрок зашел в комнату/нашел пузырек, и второй раз потом, когда проидентифицировал.
А вот маркер это идея.
И

"Я могу случайно перепутать пузырьки, так что лучше пока его не брать."

Тоже классно.

Неактивен

0    0    #24
06.12.2007 22:13

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Два одинаковый предмета

Дописал пример с динамической нумерацией. Пузырьки нумеруются по ходу появления в кадре, при старте игры они абсолютно одинаковы и называются просто "пузырек" без свойства adjective.
Код и .gam в приложенном файле.

Когда игрок видит объект (то есть выполняется метод vdesc), вызывается метод det (определить), который указывает, как надо перечислять предметы.
В нем используется объект enumerator (перечислитель), в котором хранятся необходимые данные и метод, изменяющий лексические данные объекта/

Если метод vdesc не вызывается автоматически (например, предмет не isListed), нужно вызывать det вручную, например, при входе в комнату с пузырьком.

P.S. Сорри, что не указаны проходы. Три локации, из текущей на восток и снова на восток.

Скачать

Отредактировано Hind (06.12.2007 22:19)

Неактивен

0    0    #25
07.12.2007 01:07

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

Re: Два одинаковый предмета

GrAndrey написал:

uux написал:

Эту конструкцию ГрАнд специально придумал для случаев, когда определяющее существительное в родительном падеже следует за определяемым (конструкции вида "дверь гаража", которая будет заменена на "дверь of гаража"). Поэтому тут-то как раз никаких предлогов (с точки зрения русского человека, а не TADS;) не требуется. Больше такое представление, насколько я понимаю, нигде не используется.
To GrAnd: Андрей, поправь меня, если я ошибаюсь.

Совершенно верно. ТАДС по умолчанию ожидает увидеть определяемое существительное после прилагательного, и делает исключение лишь при наличии предлога 'of'.  В русском языке на его месте могут быть самые разные предлоги, что задается в specialWords строкой  'of'='для'='против'='типа'='из'='под'='от'='на'='в'='с'. Но предлога может не быть, так как он будет "заложен" в родительном падеже определения.  Для этих случаев создается дополнительная лексема прилагательного с меткой #r. Предпарсер переделывает такие конструкции к виду "существительное для прилагательное" К сожалению, парсер все предлоги приводит к одному коду, и может вернуть только 'of'. Уж коль пошла такая пьянка, то можно сохранть предлоги для дальнейшего использования, ...

Пришел в голову обходной путь. Поскольку предлоги "из", "под", "от" и т. д. (а) и сами по себе встречаются в играх довольно редко, и (б) еще реже может возникнуть вариант, когда одному и тому же объекту соответствует сразу несколько таких предлогов, можно ввести для объекта специальное свойство, содержащее этот предлог-связку, например:

Код:

Letter: item
noun='письмо'
adjective='военкомата'
predlog='из'
sdesc="письмо из военкомата"
;
Groove: fixeditem
noun='канава'
adjective='забором'
predlog='под'
sdesc="канава под забором"
;
Clock: item
noun='часы'
adjective='брата' 'брата#r'
sdesc="часы брата"
predlog=''
;

и при запросе игроку вместо "of" подставлять свойство predlog.

GrAndrey написал:

но у меня уже голова идет кругом от последних программерских изысков smile

Да уж, активность на нашем форуме, какой давно уже не наблюдалось - практически со времен Гоуту Неубиваемого;).

Отредактировано uux (07.12.2007 01:08)

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru