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