Match-3. Match-3. Создание стартового поля без матчей.

Это первая из статей об алгоритмах match-3 игр.

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

Проблема

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

Основной проблемой является то, что поле генерируется на основе значений генератора случайного числа (как базового так и псевдо-генератора с использованием зерна(seed)). Следовательно у вас нет абсолютно никакой гарантии, что на поле не образуются комбинации 3+ в ряд.

Псевдо-генератор случайных чисел

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

Такой подход помогает в тестировании и отладке, и позволяет получить более предсказуемые результаты, по сравнению с использованием Math.random().

Оба предложенных решения базируются на возможности повторить достигнутый результат.

Решение

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


Автоматическая сборка текстурных атласов с помощью Ant’a

Для того, чтобы упростить себе работу и не заглядывать в постоянно в GUI-инструмент при обновлении ресурсов приложения я воспользовался инструментом для командной строки Texture Packer‘a от Code And Web GmbH.

Для настройки автоматической сборки атласов нам понадобится сам Texture Packer (с лицензией, так как инструмент для коммандной строки не работает в триальной версии), Apache Ant и набор тасков для него ant-contrib.
Continue Reading


Vanilla Ice небольшой апдейт

Добавлен метод extractTo и соответствующая функция верхнего уровня.

В случае если у вас уже существует объект, и вы просто хотите обновить его поля, используйте метод extracTo. Метод автоматически воспользуется типом объекта для
заполнения полей.


Vanilla Ice: преобразование объектов в строго-типизированные структуры

В одном из предыдущих постов я писал о чудесном инструменте, позволяющем преобразовывать “сырой” json в строго-типизированные объекты.

Для меня “идеологической” проблемой стали зависимости, в виде большого пака “as3-commons”, так как я никогда не использую их в работе. Помимо этого используемые для рефлексии классы из этого набора были чрезвычайно громоздкими, с большими слоями абстракций. Без всяких сомнений – работать с ними очень удобно, но для выполнения задачи которая стояла перед “vanilla” – этого было просто слишком много.

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

Из дополнительных мелочей:

  1. Кеширование карт рефлексии
  2. Поддержка векторов верхнего уровня в качестве типа для преобразования
  3. Автоматическое конвертирование простых объектов. Удобно в случае когда с сервера приходит неправильный тип (например число в виде строки)

Репозиторий на github: https://github.com/mayakwd/as3-vanilla-ice


Обновление Eaze Tween

Одному из популярных твинеров недоставало нескольких очень важных возможностей, а именно повтора твина и мульти-таргета (твин свойств нескольких элементов). Но поддержка автором уже давно не ведется.

Я исправил эту оплошность.

Синтаксис

Повтор

Количество повторов может быть как положительным так и отрицательным (для бесконечного повторения).
По умолчанию (при использовании без аргумента): -1 — бесконечное повторение.

Мульти-таргет

Репозиторий на github: https://github.com/mayakwd/as3-eaze-tween


Форматирование JSON структур на лету

Простой способ отформатировать в удобочитаемый вид сериализованную структуру JSON.

Result:

Github link.


Утечки памяти

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

Для этого вам необходимы базовые знания, о том как устроен менеджмент памяти в виртуальной машине flash.
Continue Reading