Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #64, МАРТ 2006 г.

как закалялся flash

СЕРГЕЙ ПОДБЕРЕСКИЙ

Спецвыпуск: Хакер, номер #064, стр. 064-090-3


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

С мебелью было покончено. Мы взялись за добавление остальных персонажей, которые, в отличие от мебели, двигаются по карте, а значит, изменяют z-order динамически.

Вот уже персонажи ходят по карте, случайным образом меняя направление при столкновении и обходя препятствия. Тут сами собой определились правила игры: убегать от других персонажей-монстров... и, скажем, собирать какие-то предметы. В терминах нашего офиса — «убегать от начальника» (добра от него не дождаться) и «собирать папочки» (такая вот рутинная работа). Кроме того, можно кинуть на карту какие-то бонусные предметы для дополнительных очков.

Аниматор сел рисовать начальников («толстый и лысый менеджер...»), а я начал изменять алгоритм их движения со случайного на более осмысленный — «ловить работника» (то есть началась разработка простого AI для «монстров»). Для подобных целей обычно используется алгоритм поиска кратчайшего пути, и есть множество вариантов его реализации. Я решил ограничиться упрощенным решением: определять, в каком направлении находится цель, и по нему посылать движение. Этот алгоритм «прокручивался» при каждом новом цикле анимации. Можно было бы определить весь путь до цели, записать его, а дальше просто двигаться по намеченному пути. В этом случае нужно было бы прокручивать алгоритм только один раз для конкретного случая, но в нашей ситуации цель не стоит на одном и том же месте, то есть все время двигается, что свело бы эффективность решения на нет. Нам было нужно постоянно пересчитывать алгоритм, поэтому более простое решение было выбрано прежде всего по соображениям проблем скорости. После доработки алгоритма, особенно в области обхождения препятствий («мебели»), оказалось, что убегать от «монстров» очень сложно. Соответственно, я ограничил «зону видимости» менеджера до определенного радиуса, за которым он двигался в почти случайном порядке, внутри же радиуса — начинал преследовать свою цель. Кое-какие факторы случайности были добавлены для того, чтобы сделать преследование менее предсказуемым.

Величина «радиуса видимости монстров» напрямую влияет на сложность игры. Можно было бы увеличивать ее с переходом на новые уровни (карты), тем самым постепенно повышая сложность игры. Гораздо круче — прибавить нового «монстра» с более высоким уровнем интеллекта (то есть с большим «радиусом видимости»). Этих новых «монстров» можно было бы включать в карты на более сложных уровнях, добавляя новые элементы и новый интерес. Так появился «начальник отдела» — опасный тип в черном костюме и темных очках, убежать от которого довольно сложно.

Итого. Сложность игры можно варьировать, меняя количество папок, которые нужно собрать, количество «монстров» и их типы, а также сам рельеф карты. Факторов вполне достаточно. А главное — общий, но настраиваемый алгоритм AI для всех монстров.

Назад на стр. 064-090-2  Содержание  Вперед на стр. 064-090-4