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
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    #3
15.12.2008 11:53

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

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

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

Gesperid написал:

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

В персонаже.

Неактивен

0    0    #4
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