Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
27.05.2007 15:45

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

Reachable и unreachable объекты

Вот начал писать игру к конкурсу. Возник следующий вопрос, в мануале не отраженный совсем.

Есть объект подвешенный на определенной высоте - unreachable. Есть предмет с помощью которого объект можно сбить.

В итоге когда для метательного объекта прописывается глагол для сбивания объекта (doDrop (actor, inPrep, io)), интерперетатор пишет, что до объекта опять же не добраться. Как заставить реагировать объект? Конечно, возможно определить два состояния для объекта, но чувствую (и в коде это отражено), что стандартные средства есть соответсвующие просто я не знаю как их включить. smile

Вообще считаю вопросы связанные с reachable и unreachable объектами должны быть как-то отражены в мануале. А то система очень уж путанная. Я уж не говорю о путанице связанной с тем когда объекты видны, но недосягаемы и когда объекты не видны и не досягаемы.

Неактивен

0    0    #2
27.05.2007 18:32

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

Re: Reachable и unreachable объекты

- VampirE - написал:

Вот начал писать игру к конкурсу. Возник следующий вопрос, в мануале не отраженный совсем.

Есть объект подвешенный на определенной высоте - unreachable. Есть предмет с помощью которого объект можно сбить.

В итоге когда для метательного объекта прописывается глагол для сбивания объекта (doDrop (actor, inPrep, io)), интерперетатор пишет, что до объекта опять же не добраться. Как заставить реагировать объект? Конечно, возможно определить два состояния для объекта, но чувствую (и в коде это отражено), что стандартные средства есть соответсвующие просто я не знаю как их включить. smile

Вообще считаю вопросы связанные с reachable и unreachable объектами должны быть как-то отражены в мануале. А то система очень уж путанная. Я уж не говорю о путанице связанной с тем когда объекты видны, но недосягаемы и когда объекты не видны и не досягаемы.

Хорошо бы, конечно, увидеть непосредственно код - было бы проще помочь.

Можно обратить внимание на метод validIo/validDo для данного глагола.

Я бы реализовал это примерно вот так:

Grusha: item
sdesc="груша"
Hanging=true
// Эти два определения позволяют "отсечь" большинство возможных глаголов:
dobjGen(actor, verb, iobj, prep)={if(self.Hanging)
                                                    {Груша висит слишком высоко.";
                                                      exit;
                                                    }
                                                 }
iobjGen(actor, verb, iobj, prep)={if(self.Hanging)
                                                    {Груша висит слишком высоко.";
                                                      exit;
                                                    }
                                                 }
// Далее определяем методы для тех глаголов, которые должны работать в том числе
// и для висящей груши: например, verDoInspect (осмотреть), verIoAskAbout (спросить о
// груше), verIoTellAbout (рассказать о груше) и т. п.; в том числе и для глагола, чтобы
// сбить объект ("бросить палку в грушу"):
verIoThrowAt(actor)={}
ioThrowAt(actor, dobj)={if(not self.Hanging)
                                      {"Ты уже благополучно сбил грушу.";
                                      }
                                    else
                                      {if(dobj<>Palka)
                                          {"Этим грушу не сбить.";
                                          }
                                       else
                                          {"Прицелившись, ты швыряешь палку. Сбитая груша 
                                             смачно плюхается в траву под деревом.";
                                            self.Hanging:=nil;
                                          }
                                      }
                                   }
;

Про dobjGen/iobjGen можно почитать в разделе "Последовательность синтаксического анализа". reachable/unreachable отражено там же, а также в Приложении B ""стандартные определения для игр", хотя, возможно, действительно несколько непоследовательно и недостаточно полно.

Неактивен

0    0    #3
28.05.2007 05:36

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

Re: Reachable и unreachable объекты

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

Правда, конечно же, это мое ИМХО и мой стиль программирования...

Неактивен

0    0    #4
28.05.2007 21:00

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

Re: Reachable и unreachable объекты

- VampirE - написал:

2 uux

Спасибо за код, разобрался. Но тут опять проблема. Создал глагол "сбивать":

sbitVerb: deepverb
    verb = 'сбить' 'сбей' 'снести' 'сноси'
    vopr = "Что "
    sdesc = "сбить"
    prepDefault = withPrep
    ioAction(withPrep) = 'SbitWith'
;

PS type в описании глагола это спряжение его, да? smile

Елки-моталки, вот так вот допустишь неточность (да что там "скромничать" - ошибку aka ляп в переводе), а она тебя потом, через несколько лет, догонит;).

Сейчас блин повозился с дебаггером и выяснил: type для глагола - это не его спряжение, а (как там оно у филологов правильно называется?wink его управление. Насколько я смог вспомнить, type=1 означает, что глагол использует для косвенного объекта творительный падеж ("сбить грушу камнем"), type=2 - дательный падеж "дать грушу другу", а type=3 означает возможность использования как творительного, так и дательного падежа. type=0 (значение по умолчанию), соответственно, означает, что ни один из этих падежей не используется.

В мануале совершенно не по делу написано, что type - это спряжение. Меня сбило с панталыку то, одна из функций-формирователей окончаний использует одноименный аргумент в качестве флага для формирования окончания глагола.

В Вашем примере, уважаемый VampirE, для sbitVerb достаточно определить type=1, и будет Вам счастье;).

Еще раз приношу извинения за неточность в мануале. При следующем обновлении мануала обязательно исправлю.

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru