Тут в соседней теме зашел разговор о клонах, и я решил вынести отдельное обсуждение по ним.
Суть вопроса вот в чем. Клоном будем считать предмет, который описан единожды (описан, значит, получил конкретный набор свойств), но как объект в игре встречается минимум дважды. Тривиальный пример: монета/банкнота, совокупность которых образует деньги.
Так вот, хотелось бы знать ваше мнение: нужны ли в IF предметы-клоны?
А если нужны, то как вы видите их реализацию со стороны программиста?
И самое интересное (конкретная ситуация): на столе и на полу лежат два экземпляра объекта "нож". Как следует реагировать на команду
>взять нож
Неактивен
То что ты называешь клонами, просто обыкновенные объекты-наследники, которые не обладают ещё отличительными свойствами. Используются, в основном, с опцией неразличимости. В этом случае программа будет писать: Ты видишь здесь 386 ножей. Это лучше чем: Ты видишь здесь нож, нож, ... (383 раза) и нож.
Пусть их только два:
>взять нож
Который нож вы имеете в виду: нож или нож?
>нож
Который нож вы имеете в виду: нож или нож?
и так до бесконечности.
Здесь поможет только (о чем далеко не все знают) такая фраза:
>взять любой нож
Так что, при динамическом создании таких объектов, им лучше всего давать уникальные описания (длинный нож, кривой нож) или делать их неразличимыми(чтобы они "складывались в кучку").
Неактивен
Nash написал:
Проблема не надумана. ... Песчинок, допустим, 1000. Подхожу я, беру 332е.
Я представляю, сейчас наступило лето, ты поедешь к морю, придешь на пляж и, несколько раз пересчитав, подберешь ровно 332 песчинки. После этого тебя, по рекомендации окружающих, отвозят в больницу с подозрением на солнечный удар. Там ты объясняешь, что ты пытаешься решить проблему объектов-клонов, и проблема эта весьма актуальна и важна для игровой деятельности.
Тут-то и начинается квест: выбраться из психиатрической лечебницы ![]()
Неактивен
Nash написал:
Но, собственно, проблема клонов на этом не заканчивается
Есть еще клоны-контейнеры.
Пример:
В кладовке вы видите 2 ящика.
>положить нож на ящик
>осмотреть ящик
Что скажете по этому поводу? Особенно по второй команде?
А еще меня интересует вопрос вложенности предмета в предмет. Если я хочу положить нож в ящик, обязательно ли ящик должен находиться непосредственно в локации или, допустим, он может лежать в открытом контейнере (который находится в локации). Это, скорее, не к проблеме реализации (хотя и к ней тоже: нужно правильно определять, открыт ли путь доступа к указанному предмету), а просто к теории IF.
Это все, кстати, легко проверяется. Возьми любую обучалку RTADS, создай в ней пару ножей и контейнеров. И экспериментируй на здоровье. Клади ножи в контейнеры, контейнеры в контейнеры, а если хочешь, то можешь нож тоже сделать контейнером и в него что-нибудь положить.
Неактивен
Nash написал:
Э..Я имел в виду ваше личное мнение, а не как оно реализовано в TADS
Т.е. стоит ли позволять игроку ложить нож в ящик, который непосредственно в локации не находится (т.е. находится, но внутри другого контейнера. Или вообще на третьем и более уровне вложенности).
Зачем вообще такие ограничения? Должны быть функции, которые определяют, какие из объектов являются доступными для действующего лица. Можно сделать чтобы все содержимое доступных объектов было доступным, а можно запретить даже отображение содержимого (закрытая шкатулка). Как настроишь, так и будет. Все зависит от твоего усердия и внимания.
Неактивен
Nash написал:
Никаких ограничений.
Я ожидал услышать только твое мнение. Просто тогда полная фраза для парсера будет выглядеть так:
>положить нож в ящик на подставке на столе
Или нет?
Можно просто:
>положить нож в ящик
Если будет неясно какой ящик, придется уточнить. Не знаю как насчет нескольких слоев, но фраза "взять нож со стола", и даже "взять нож на столе" работает великолепно. И вообще, зачем такие большие нагромаждения? Игрок им не обрадуется. ![]()
Кстати, у меня принимаются такие фразы: "положить петушка на палочке на полку". Правда, иногда этот прикрученный мной механизм портит правильные фразы, но это было всего два раза и я уже не помню какие именно. Кто найдет, буду благодарен ![]()
Неактивен
Провел указанный эксперимент для RTADS
Результаты:
> взять ящик на подставке
Взят.
> взять ящик на столе
Который "ящик" Вы имеете в виду: ящик или ящик?
> взять ящик
Который "ящик" Вы имеете в виду: ящик, ящик или ящик?
Нужны комментарии?
Неактивен
ПсихЪ написал:
Да чё за бред?
-На столе вы видите 2 ножа
>взять нож
*Вы взяли нож
>инвентарь
*Содержимое инвентаря
1. Нож
<поскипал>
>взять 2 ножа
*Вы взяли 2 ножа
>инвентарь
*Содержимое инвентаря
1. 2 ножа
В чём проблема-то? Увидели, что есть хоть 1 нож - взяли. Если их несколько, то взяли первый попавшийся.
Это частный случай - совершенно неразличимые предметы.
А так?
Вы в кузнице.
Вы видете металлический прут на столе. Вы видите металлический прут в печи.
>взять прут
*Вы взяли металлический прут из печи и обожгли себе руки. Тперь Вы не сможете принимать участие в созтязании лучников.
*Вы проиграли!*
Неактивен
Olegus t.Gl. написал:
Ну что же, в следующий раз игрок наберёт "взять прут со стола"...
"Автор думает о Вас! Его решение - попробуйте снова! "
А серьёзно, без уточнения в случаях двусмысленности возникает *очень назойливая* проблема выбора предмета. Вы просто не представляете сколько есть таких предметов, которые могут путаться, если делать игру качественно и прописывать большое число синонимов. При большой игре это обязательно проявится, и горе игроку, если два таких предмета окажутся в его инвентаре!
Нечасто, но порой будут возникать моменты, типа приведенной выше, угрожающие жизни персонажа из-за такой "самостоятельности" игры.
И всё потому, что автор считает что незачем усложнять систему.
Просто согласитесь, что:
>взять нож
Какой вы хотите взять нож: длинный или короткий?
>короткий
Вы взяли короткий нож.
лучше чем:
>взять нож
Вы взяли длинный нож.
>взять нож
Вы перегружены!
>положить нож
Вы бросили нож.
>взять нож
Вы взяли длинный нож.
>с
Вы пошли на север
>положить нож
Вы бросили нож.
>ю
Вы пошли на юг
>взять нож
Вы взяли короткий нож.
Это конечно, худший случай, но где гарантия, что игра даже со второго раза угадает правильно? Каждый раз подробно расписывать что хочешь взять?
Неактивен