Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
30.01.2008 14:38

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Поверхности и контейнеры

А почему поверхность при ее осмотре не выписывает список предметов, которые лежат на ней? И контейнеры тоже...
Гранд, может, доточить библиотеку? Какое-то глобальное упущение.

Пример. На столике лежит ключ. Если я напишу осмотреть столик, то выведется ldesc столика, но не напишется, что "на столике лежит ключ". Что, в целом, неправильно...

Неактивен

0    0    #2
02.02.2009 18:16

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

Re: Поверхности и контейнеры

GrAndrey написал:

Не проверял, но на первый взгляд проблема в изобилии классов для сейфа. Он в первую очередь контейнер, а потом уже поверхность. В плане "нахождения" "на" и "в" реализованы одинаково, и поэтому когда кладешь что-то на сейф, оно оказывается внутри.

Да, похоже именно так и есть.

Самый простой вариант (особенно с точки зрения новичка;) - убрать surface из списка классов.

И еще такой момент: у тебя действительно явный избыток классов. Определение сейфа можно сократить до

Код:

box: keyedLockable, fixeditem

поскольку в данном случае container и openable ничего нового не внесут (keyedLockable - наследник этих классов).

Неактивен

0    0    #3
06.02.2009 01:39

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

Re: Поверхности и контейнеры

noname написал:

GrAndrey написал:

Да, нужны два объекта - "сейф" и "сейфовая ячейка". Некоторые действия над сейфом переадресовывать ячейке, а многие над ячейкой - сейфу.

а насколько это сложно? не будет ли затруднительно выложить пример, где сейф можно отпереть/запереть, открыть/закрыть, ложить ключи и яблоко  как В сейф, так и НА него?

Ну, примерно вот так:


Safe: surface, fixedItem  // Сейф для укладки "на сейф"
name='сейф'
sdesc="сейф"
ldesc="Мощный металлический шкаф с широкой поверхностью сверху и сейфовой ячейкой посередине."
location=startroom
// Переадресация на сейфовую ячейку
doOpen -> SafeInside  //Открыть
doClose -> SafeInside // Закрыть
doLock  -> SafeInside // Запереть
doLockWith -> SafeInside // Запереть при помощи...
doUnlock -> SafeInside // Отпереть
doUnlockWIth -> SafeInside // Отпереть при помощи...
ioPutIn -> SafeInside // Положить в...
;
SafeInside: keyedLockable, fixedItem  // Сейфовая ячейка для укладки "в сейф"
name='ячейка'
adjective='сейфовая'
sdesc="сейфовая ячейка"
ldesc="Сейфовая ячейка посередине мощного металлического шкафа."
location=startroom
// Переадресация на сейф
ioPutOn -> Safe // Положить на...
;


-> - краткая форма записи переадресации глагола, говорящая о том, что для глагола, стоящего слева от "стрелки", будет вызываться набор соответствующих методов-верификаторов и методов действий объекта, стоящего справа от "стрелки". Т. е., скажем,


doClose -> SafeInside


аналогично записи

verDoClose(actor)={SafeInside.verDoClose(actor);}
doClose(actor)={SafeInside.doClose(actor);}

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

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru