Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
12.12.2008 16:54

Olegus t.Gl.
Участник (+1053, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2879
Вебсайт

Расположение персонажа в пространстве внутри отдельной локации

А вот действительно, как лучше реализовать описанную здесь ситуацию в идеальном варианте, т.е. не привязываясь к конкретной платформе?

Korwin написал:

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

Один вариант был озвучен (ASBer) — добавление ещё одного свойства "isSitting" у персонажа игры.
Какие будут ещё идеи?

Неактивен

0    0    #2
12.12.2008 17:52

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

Re: Расположение персонажа в пространстве внутри отдельной локации

Да какие тут могут быть идеи? Разве что сделать свойство более общим – во многих графических игрушках можно встать, (при)сесть, лечь и это состояние часто отображается в уголке smile

Неактивен

0    0    #3
12.12.2008 18:07

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

меньше слов

Re: Расположение персонажа в пространстве внутри отдельной локации

Когда персонаж лежит на кровати, "встать" должно обозначать встать с кровати или на кровать?

Неактивен

0    0    #4
12.12.2008 19:09

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

Re: Расположение персонажа в пространстве внутри отдельной локации

GrAndrey написал:

Когда персонаж лежит на кровати, "встать" должно обозначать встать с кровати или на кровать?

Это у же другой вопрос и к состоянию "вертикальсноти" персонажа отношения не имеет smile

Неактивен

0    0    #5
12.12.2008 19:38

Eten
Участник (+9, -307)
Откуда: Балаково, Санкт-Петербург.
Зарегистрирован: 21.05.2007
Сообщений: 1416
Вебсайт

---

Re: Расположение персонажа в пространстве внутри отдельной локации

Когда персонаж лежит на кровати, "встать" должно обозначать встать с кровати или на кровать?

А нельзя ли так: взять переменную ПОЛОЖЕНИЕ и объект Т на котором герой находится. Если объект Т указывает на ничто (пусто), значит игрок не находится ни на одном из объектов, иначе говоря на полу.

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

А теперь в зависимости от положения определить возможность выбранного действия. Например, описанная проблема Корвином выглядит так, есть стул и полка, сам игрок. Игрок сможет достать книгу с полки только если, он окажется на поверхности позволяющей ему дотянуться до полки. Т.е. стул в данном случае подразумевается поверхность выше пола, но на нее можно не только встать, но и сесть. Тогда с помощью пременной ПОЛОЖЕНИЕ мы определяем текущее положение игрока, а с помощью переменной Т (это объект) мы узнаем на каком объекте игрок находится в данном пололжении. А уж на встал ли он на открытый снудук (иначе в него) или на стул (или закрытый сундук) мы определяем доп. свойством (описано выше), которое указывает на данное отношение объекта Т к игроку.

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

А теперь вернемся к цитате, здесь ситуация в сравнении с корвином (если ставить туже цель) проще, но сложнее в том, что игроку нужно определить, что он может делать из своего положения. Здесь есть объект - кровать и игрок. В данном случае известно, что ПОЛОЖЕНИЕ лежит, то все проще паренной репы. Ам, вы GrAndrey, что чаще делаете не задумываясь при этом, встаете с кровати или на кровать? Логичный ответ, с кровати. Следовательно в данном вопросе игрок встает с кровати только в том случае, если был введен только глагол встать. Если же будет встать на кровать, то оно и понятно, игрок встанет на кровать. Подведя итог, скажу, что все зависит от определенных вами правил в игре. В физическом мире, играя нормальным игроком, мы будем вставать с кровать при попытке встать из положения лежа на кровати. Для тех кто все же не понял уточняю, автор руководствуясь законами того мира, который он создает, определяет логичные действия без дополнительных определений, а сами эти же доп. определения говорят о  совершении другого действия или того же самого (например встать и встать с кровати - синонимичные действия).

Так что задаваясь определенными вопросами, сначало определите какой мир будет у вас и каким законам он подчиняется, как станут вести себя персонажи этого мира в действиях, в которых нет особой конкретики ( в нашем мире у людей все также). Уж извините за вопрос, вы когда какаете в туалете, вы это делаете очень конкретно и осознано (может вы еще и процесс со всеми командами в парсере представляете lol ) или ....?
З.Ы.
На мой взгляд глупо зажимать определения в коде платформы, лучше предоставить нужный инструмент, а авторам привыкнуть к тому, что без знания теории алгоритмов, то бишь программирования - нормальной игры не сделаешь. Или согласиться со всей направленностью выбранной вами платформой, раз уж она вам так облегчает создание квеста. wink

Отредактировано Eten (12.12.2008 19:39)

Неактивен

0    0    #6
12.12.2008 22:26

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

Re: Расположение персонажа в пространстве внутри отдельной локации

Gesperid написал:

Да какие тут могут быть идеи? Разве что сделать свойство более общим – во многих графических игрушках можно встать, (при)сесть, лечь и это состояние часто отображается в уголке smile

На самом деле, есть еще один вариант: сделать по разным командам перемещения в разные локации. То есть для команд "встать на стул", "сесть на стул" сделать не так, как в ТАДСе сейчас - "вложенная" в текущую комнату локация стула с дополнительным флагом для различения состояния, а две независимые полноценные локации. (Ну, проще говоря, сделать стул-телепортwink. Правда, тут возникает ряд дополнительных проблем и, признаюсь честно, в своей игре я бы так делать не стал.

Хотя, безусловно, все зависит от конкретного эффекта, которого хочешь достичь.

Неактивен

0    0    #7
12.12.2008 22:27

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

Re: Расположение персонажа в пространстве внутри отдельной локации

Eten написал:

GrAndrey написал:

Когда персонаж лежит на кровати, "встать" должно обозначать встать с кровати или на кровать?

А нельзя ли так: взять переменную ПОЛОЖЕНИЕ и объект Т на котором герой находится. [...]

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

Например, нижепреведённому  пазлу, эти эффекты не мешают, т.к. на столик ни сесть, ни лечь. Не было б там стульев, то и придраться, в этом отношении, не к чему smile

Код:

>сесть на столик
Я не знаю как сесть на белый столик. 

>лечь на столик
Я не знаю как лечь на белый столик. 

>встать на столик
Хорошо, ты теперь стоишь на белом столике. Хозяева смотрят на тебя с изумлением! Зато отсюда видно воронье гнездо на крыше бунгало! Ты заметил в гнезде золотую брошку и взял ее. 

>встать
Хорошо, ты больше не на белом столике.

GrAndrey, что ты сам по-своему вопросу думаешь?

Неактивен

0    0    #8
12.12.2008 22:29

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

Re: Расположение персонажа в пространстве внутри отдельной локации

Eten написал:

З.Ы.
На мой взгляд глупо зажимать определения в коде платформы, лучше предоставить нужный инструмент, а авторам привыкнуть к тому, что без знания теории алгоритмов, то бишь программирования - нормальной игры не сделаешь.

Про теорию алгоритмов, признаться, не понял sad

Неактивен

0    0    #9
13.12.2008 08:39

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

меньше слов

Re: Расположение персонажа в пространстве внутри отдельной локации

Gesperid написал:

GrAndrey, что ты сам по-своему вопросу думаешь?

Думаю, что проблема надуманная. Обычно игроку без разницы, лежит или сидит персонаж на траве или кровати, и автор должен быть с ним солидарен. Стоять на кровати - нестандартная ситуация, и если она возникла, то и обрабатывать её надо нестандартно. Например, встал на кровать - автоматом обшарил пространство за картиной, нашел ключ, слез. Всяко лучше, чем игрок бы влез на неё и стал гадать, что ему тут делать, какие предметы отсюда доступны и какие нет.
Если кого-то прижмет делать полноценную симуляцию положения тела относительно предмета, то, действительно, проще всего будет реализовать это через флаги у персонажа. Придется переписать ряд глаголов, прописать свойства и изменить сообщения у многих классов. Причем функционально понадобиться только одно изменение - выдовать разный список доступных объектов для разного положения. Реально, но нужно ли?

Неактивен

0    0    #10
13.12.2008 11:21

Eten
Участник (+9, -307)
Откуда: Балаково, Санкт-Петербург.
Зарегистрирован: 21.05.2007
Сообщений: 1416
Вебсайт

---

Re: Расположение персонажа в пространстве внутри отдельной локации

Про теорию алгоритмов, признаться, не понял

GrAndrey уже привел по этому поводу в 9 посте.

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

Неактивен

0    0    #11
13.12.2008 18:47

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Расположение персонажа в пространстве внутри отдельной локации

Olegus t.Gl. написал:

А вот действительно, как лучше реализовать описанную здесь ситуацию в идеальном варианте, т.е. не привязываясь к конкретной платформе?

Если есть возможность динамически менять класс объекта (как в ТОМе) то можно сделать примерно так:

class царевна_обычная.cls = girl
... описываем свойства царевны обычной

class царевна_стоя.cls = царевна_обычная
... дополняем свойства царевны в положении стоя

class царевна_сидя.cls = царевна_обычная
... дополняем свойства царевны в положении сидя

class царевна_лежа.cls = царевна_обычная
... дополняем свойства царевны в положении лежа

class спящая_царевна.cls =  царевна_лежа
... дополняем свойства царевны во сне

unique царевна.cls = спящая_царевна //при старте игры спит

А дальше остается только менять классы нашей царевне в зависимости от ситуации. При этом будут меняться описания, способы выполнений действий и т.п.

P.S. согласен с GrAndrey что нестандартное поведение должно быть оправдано логикой игры. Иначе нужно просто запрещать вставать на стол, стул или на кровать.

Неактивен

0    0    #12
15.12.2008 11:02

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

Re: Расположение персонажа в пространстве внутри отдельной локации

ASBer, где при таком подходе располагается код взаимодействия с объектами?

Неактивен

0    0    #13
15.12.2008 11:53

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Расположение персонажа в пространстве внутри отдельной локации

Gesperid написал:

ASBer, где при таком подходе располагается код взаимодействия с объектами?

В персонаже.

Неактивен

0    0    #14
15.12.2008 12:13

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

меньше слов

Re: Расположение персонажа в пространстве внутри отдельной локации

Ещё одно замечание - если позволить игроку садить и вставать на все подряд, это только усилит его фрустрацию. Я, например,  раз наткнувшись на необходимость залезть на стул, буду лезть на все подряд всякий раз когда застрял и не знаю что делать. Но просто залезть - это ещё ничего, но если будет разрешено на все залазить и в этом новом положении выполнять любые действия, - представляете этот комбинаторный взрыв и недоумение игрока?

Отредактировано GrAndrey (15.12.2008 18:35)

Неактивен

0    0    #15
15.12.2008 14:48

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

Re: Расположение персонажа в пространстве внутри отдельной локации

ASBer написал:

Gesperid написал:

ASBer, где при таком подходе располагается код взаимодействия с объектами?

В персонаже.

Получается вложенный switch?

Код:

switch (действие)
{
    ...
    case действие:
        switch (объект)
        {
             ...
             case объект:
                 {
                 // обработка действия с объектом
                 }
             ...
        }
    ...
}

Отредактировано Gesperid (15.12.2008 14:49)

Неактивен

0    0    #16
15.12.2008 15:29

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Расположение персонажа в пространстве внутри отдельной локации

Gesperid написал:

Получается вложенный switch?

Совсем не обязательно.
1. Все проверки объектов выполняются в объекте действия (глагол в терминах рТАДСа)
    Объекты, не подходящие действию, дальше не проходят.
2. У персонажа вызывается метод, одноименный с действием.
    switch по действию таким образом исключается.
    Если необходимый метод у персонажа отсутствует - выводится стандартное сообщение.
3. При необходимости никто не запрещает из метода персонажа вызвать метод объекта.
    switch по объекту таким образом исключается.
4. Все это выполняется с учетом классов - и объекты и персонажи и действия являются потомками классов, и большинство методов будет прописано для классов.
5. Все это же можно сделать и через switch.
    В ТОМе switch многопозиционный, выглядеть это может например так:

Код:

switch(actor,act,object)
case(Петя,,еда) { ...реакция Пети на  еду независимо от действия... }
case(Вася,взять,ёж) { ...особый способ Васи брать ежа... }
case(,,оружие){ ...особое отношение к объектам класса оружие... }
case() object.doTake(actor,act) //для прочих комбинаций вызываем метод в объекте

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru