Какие принципы используются для Иерархического конечного автомата и как реализовать базовую модель?

Итак, я пытаюсь сделать игру с использованием C ++, и я прочитал массу статей на Конечные автоматы (ФСМ), а также Иерархические конечные автоматы (HSM). Тем не менее, я признаю, что большинство прочитанных материалов немного плотное и трудное для понимания, поэтому я надеялся, что кто-то может упростить это для меня. Этот ответ — FSM или HSM?

Из того, что я хотел бы прояснить:

  1. Чем HSM отличается от обычного FSM и почему он лучше для игр?

  2. Что касается C ++, как вы реализуете базовый HSM, следуя шаблону состояния? (Я могу ошибаться в этом / использовать неправильные слова.)

  3. Как именно вы обрабатываете переходы? О каких методах on_exit и on_enter я постоянно слышу?

  4. Нужен ли мне один HSM для всей моей игры? (например, обработка всех врагов, действий игрока, игровых меню) или я использую несколько модулей HSM?

  5. При реализации сущностей игроков все ли они будут подмножеством состояния сущности?

  6. Наконец, если бы кто-то мог дать какой-то псевдокод, чтобы помочь визуализировать эти вопросы, я был бы признателен.

3

Решение

Это просто о вложенности. HSM — это, по сути, FSM, но каждый штат в свою очередь может быть отдельным FSM.

Для примера в игре рассмотрим NPC. Он имеет несколько состояний:

  1. Прогулка до точки А
  2. Подождите минуту
  3. Прогулка до точки Б
  4. Подождите минуту
  5. Продолжить с 1
  6. Борьба с ПК

Этот FSM прост, но все состояния должны иметь переход в состояние 6 (Борьба с ПК), когда NPC подвергается атаке ПК. Это делает ФСМ уродливым. Так что вместо этого давайте этот Гораздо проще ФСМ:

  1. Гулять
  2. Борьба с ПК

Этот FSM очень прост, есть только два перехода, и это легко понять. Основные части штата 1 являются вторичными FSM:

  1. Прогулка до точки А
  2. Подождите минуту
  3. Прогулка до точки Б
  4. Подождите минуту

Если есть событие, которое не соответствует вторичным переходам FSM, например, атака ПК, вы поднимаетесь на уровень к FSM верхнего уровня, чтобы соответствовать событию и находите подходящий переход.

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

Короче говоря, это способ упростить FSM.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]