@IsaevDev

Как бы вы реализовали принятие решений программой в pick'n'point игре?

Возьмем, например, Machinarium или любую подобную pick'n'point игру

Как бы вы организовали логику принятия решений программой? Скажем, я стою в позиции А, нажимаю некую кнопку. Как программа решает, что нужно проехать до позиции Б и воспроизвести анимацию

Мне на ум приходят несколько вариантов:
1) Каждая позиция/кнопка на уровне - класс, который проверяет условия на уровне ( где находится герой, какие задания уже выполнены ) и раздает команды.
2) Либо на каждый уровень есть единый класс-обработчик, который принимает решения

Опять таки - проверка условий и принятие решений - это куча if else для каждого уровня или лучше заморочиться с неким протоколом вида 'if click pos A or C then go B play mov1' и парсером

Речь идет о, порядка, 30 уровнях. Все разные. Везде куча зависимостей задание/позиция. Хотелось бы стандартизировать. Есть какие-то мысли?
  • Вопрос задан
  • 373 просмотра
Решения вопроса 1
@MarkusD
все время мелю чепуху :)
Классами это все решать - это бросок самого себя через свое бедро... Убьешься, в общем.

Читай Шампандара, тебе нужен раздел деревьев поведения (Behavour Tree) и планировщика решений (Goal Planning).
Любое действие игрока - это триггер. Скапливаясь, или каждый сам по себе, триггеры влияют на внутреннюю память автомата. Автомат просто выполняет то действие, которое соответствует его текущей внутренней памяти.
Описание автомата лучше всего делать на скриптовом языке (LUA/Python embedded).
Каждый уровень - это лишь описание автомата в скрипте.
Сами действия. Куда то перейти итд... Это уже смотря как твоя сцена сделана. Это можно сделать как жесткой анимацией с именем (которую будет запускать автомат), так и с помощью подсистемы AI (в которую и будет отдавать указания все тот же автомат).

С такой организацией ты себе гору времени и нервов убережешь.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Loligan
class click
{
click back; //ссылка на предыдущее действие, я понимаю действия линейные и идут по цепочке
click front1; //действие №1
click front2; //действие №2

private bool click (...)
{
if (f1)
then....
else
...
}

}

Не знаю ли донес суть. Пишу в очень сонном состоянии.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы