А вот действительно, как лучше реализовать описанную здесь ситуацию в идеальном варианте, т.е. не привязываясь к конкретной платформе?
Korwin написал:
Столкнулся с такой проблемой: сесть и встать и лечь фактически синонимы. В результате в игре "встать на стул" и "сесть на стул" приводят игрока в одно и то же положение. В итоге может возникнуть ситуация, когда стоя на полу герой не достает книжку с полки, а сидя на стуле - достает. Кто-что думает по этому поводу?
Один вариант был озвучен (ASBer) — добавление ещё одного свойства "isSitting" у персонажа игры.
Какие будут ещё идеи?
Неактивен
Olegus t.Gl. написал:
А вот действительно, как лучше реализовать описанную здесь ситуацию в идеальном варианте, т.е. не привязываясь к конкретной платформе?
Если есть возможность динамически менять класс объекта (как в ТОМе) то можно сделать примерно так:
class царевна_обычная.cls = girl
... описываем свойства царевны обычной
class царевна_стоя.cls = царевна_обычная
... дополняем свойства царевны в положении стоя
class царевна_сидя.cls = царевна_обычная
... дополняем свойства царевны в положении сидя
class царевна_лежа.cls = царевна_обычная
... дополняем свойства царевны в положении лежа
class спящая_царевна.cls = царевна_лежа
... дополняем свойства царевны во сне
unique царевна.cls = спящая_царевна //при старте игры спит
А дальше остается только менять классы нашей царевне в зависимости от ситуации. При этом будут меняться описания, способы выполнений действий и т.п.
P.S. согласен с GrAndrey что нестандартное поведение должно быть оправдано логикой игры. Иначе нужно просто запрещать вставать на стол, стул или на кровать.
Неактивен
Gesperid написал:
ASBer, где при таком подходе располагается код взаимодействия с объектами?
В персонаже.
Неактивен
Gesperid написал:
Получается вложенный switch?
Совсем не обязательно.
1. Все проверки объектов выполняются в объекте действия (глагол в терминах рТАДСа)
Объекты, не подходящие действию, дальше не проходят.
2. У персонажа вызывается метод, одноименный с действием.
switch по действию таким образом исключается.
Если необходимый метод у персонажа отсутствует - выводится стандартное сообщение.
3. При необходимости никто не запрещает из метода персонажа вызвать метод объекта.
switch по объекту таким образом исключается.
4. Все это выполняется с учетом классов - и объекты и персонажи и действия являются потомками классов, и большинство методов будет прописано для классов.
5. Все это же можно сделать и через switch.
В ТОМе switch многопозиционный, выглядеть это может например так:
switch(actor,act,object) case(Петя,,еда) { ...реакция Пети на еду независимо от действия... } case(Вася,взять,ёж) { ...особый способ Васи брать ежа... } case(,,оружие){ ...особое отношение к объектам класса оружие... } case() object.doTake(actor,act) //для прочих комбинаций вызываем метод в объекте
Неактивен