Koegin 0.2 - Подробный отчёт

May 17, 2019 - Reading time: 4 minutes

Время подвести итоги о разработке игры Koegin 0.2 версии.

img

Игра полностью преобразилась. Более удобное управление, интерфейс, юниты, миникарта и тд. В данной статье я расскажу о новых фичах, багах, и с какими трудностями пришлось столкнуться.

Изначальной целью было полностью переписать проект, сделать код более стабильным. Практика показывает, что возможно придётся переписывать почти всё заново. Поддерживать код по прежнему сложно (добавление/удаление фич).

Юниты и поиск пути

Воздушные штурмовики

img

С добавлением наземных и воздушных юнитов, играть стало на много легче (что не удивительно). Единственное, что стояло на пути - это поиск пути. И если с воздушными юнитами всё просто, то с наземными всё очень не просто.

Во первых, они не должны проходить сквозь друг друга и препятствия. Это легко решить.

Решение порождает новые проблемы

img img

Во вторых, юниты должны уметь обходить препятствия. Решение - добавить алгоритм поиска пути. Вот тут самое весёлое.

Алгоритмов поиска пути много, но я решил остановиться на классическом A (A star). В отличии от JumpPointSearch, A сразу строить путь к цели. Было бы всё так просто...

'Жадный' поиск пути

img img

Это один из способов поиска пути для A*. Жадный поиск даёт не самый короткий путь, но делает это быстро.

А что насчёт JumpPointSearch?

Алгоритм является улучшенным алгоритмом поиска пути A*. JPS ускоряет поиск пути, “перепрыгивая” многие места, которые должны быть просмотрены.

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

Пример - построение пути между двумя точками на одной линии без стен:

img

На это ему потребовалось 2235 операций. В то время как А* справляется за 35 операций. Если поставить блоки как на картине, то JPS найдёт путь мгновенно:

img

Вывод: JPS в открытых пространствах ему становится плохо. Так что я решил не париться и взял A*. Не много переписав под себя, получаем желаемый результат: юнит ровно обходить препятствия:

img

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

img

Турели

Прежние: Лазерная и ракетная. Для открытия каждой турели требовалось построить соответствующую лабораторию. Лазерная турель стреляет медленно, но мощно. Ракетная стреляет ракетой, которая летит в цель и при взрыве наносит урон по площади.

Так же добавлена новая турель - Пулемётная. Она доступна изначально, стоит не дорого и требует мало энергии на перезарядку. Но она эффективна только против слабых юнитов.

img

Правильная комбинация турелей даёт гарантию 100% защиты базы...пока у вас есть энергия.

img

Баги

Баги. Их много. Исправлять их, конечно же, очень нужно. Интерфейс не информативный (да и выгдяит ужасно), микрить юнитами невозможно, нелогичные приоритеты при перегрузке сети.

Начиная от банальных, с неправильной расстановкой слоёв:

img

До вращающихся турелей:

img

Было не красиво то, что башня турели сразу наводилась на врага. Хотелось какой то плавности. И тут я столкнулся с проблемой:

img

Нельзя просто так взять, и двигать угол в нужную сторону. К счастью, мне помогли на форуме. Банальное решение - использовать метод MathHelper.WrapAngle для плавного вращения спрайта.

Есть так баг, который так и не удалось починить. Если юнита зажать в правый нижний угол, то он откажется выполнять поиск пути. Но известно, что пробела лежит в поиске пути.

img

Итоги

Список TODO на следующую версию огромный:

  • Улучшить формат данных карты
  • Увеличить размер сетки с 16 до 32 пикс
  • Размер тайла тоже 32 пикс
  • Переписать поиск пути
  • Починить баг поиска пути вне карты
  • Настройка громкости для звуков и музыки
  • Баланс траты энергии на строительство юнитов и перезарядку турелям
  • Улучшить UI
  • Починить шейдер
  • Переписать редактор карт
  • Убедиться, что поиск пути наземных юнитов не конфликтует с воздушными
  • Подробное описание построек и их цена
  • Включить описание построек, которые не доступны (и инфа что требуется для открытия)
  • Анимация строительства юнитов
  • Голограмма ядра тоже должна показывать радиус строительства

И это только баги. В версии 0.3 будут исправлены все баги, и новый/обновлённый интерфейс с заготовкой под 0.4 версию.

img