Crown - это попытка переосмыслить классическую механику «три-в-ряд», добавив в неё физику и тактику. Проект создавался не просто как игра, а как демонстрация возможностей моего графического движка Perfect Engine. Исходный код открыт - для тех, кому интересно заглянуть под капот.
Здесь нет привычной перестановки соседних фишек. Вместо этого - механика инерции. Игрок собирает короны с помощью четырёхстороннего удара, который расталкивает объекты. И тут вступает в силу физика веса:
Одиночная корона от удара отлетает через клетку
Две короны рядом тяжелее - они сдвигаются только на одну
Здесь ты не просто ищешь совпадения, ты просчитываешь геометрию поля. Если научиться использовать инерцию правильно, можно собирать комбинации из 6 и 8 корон, получая бонусы (заморозку времени, направленные удары или взрыв области).
Веб-подход в десктопе
Разработка велась на стыке технологий. Дизайн игры рисовался в PSD, а код должен был этот дизайн оживить. Я перенёс опыт веб-разработки в Delphi. Чтобы игра выглядела идеально чётко на любом разрешении (вплоть до 800x600). Получился класс адаптивного интерфейса, где все координаты и размеры задавались в процентах через INI-файлы (по аналогии с CSS). Графика не растягивалась, а перестраивалась, сохраняя пиксельную точность.
Этот модуль вышел настолько удачным, что позже лёг в основу интерфейса Galaxy Boom mini (включая меню выбора персонажа). Позже я доработал эту систему, добавив наследование и анимацию векторных объектов.
Ту же гибкость я заложил и в графическое ядро Perfect Engine. Игра не требует мощного железа и сама выбирает, как рисовать картинку: через OpenGL, если есть видеокарта, или через старый добрый Canvas (GDI), если драйверов нет.
Причём сделано это экономно. Чтобы не хранить две версии всех текстур, я выстроил умную иерархию папок. Общие файлы лежат вместе, а специфичные (вроде прозрачности, недоступной для GDI) — отдельно. Движок просто берёт то, что может переварить текущий режим, не нагружая диск дубликатами.
Алгоритм честной игры
Самым сложным вызовом стала не графика, а математика баланса. При плотном заполнении поля обычная случайность часто приводила к каскадным срабатываниям: новые короны падали так удачно, что мгновенно собирали ряды и очищали половину экрана без малейшего участия игрока. Пришлось научить игру просчитывать расстановку наперёд. Теперь специальный алгоритм проверяет свободные клетки, исключая появление уже собранных линий.

