material

Crown

Теги: Программирование, Delphi, Игры
Логическая игра Crown

Двухмерная логическая игра Crown - свежий взгляд на, казалось бы, уже забитую идею «три в ряд» от команды Perfect Light. Игра была создана в качестве демонстрационного проекта для графического движка Perfect Engine и распространяется с открытым исходным кодом. Саму игру и ее исходники вы можете скачать чуть ниже, в файловом блоке.

Игра представляет собою модификацию распространенной идеи «три в ряд», только здесь вам предстоит собирать не драгоценные камни, а... короны! Но не все так просто: собирать ряды из корон вам придется при помощи специального четырехстороннего удара, расталкивающего объекты в разные стороны, и подчас мешающего нормальной игре.

Впрочем, научившись применять этот удар правильно, вы будете иметь значительное преимущество, ведь, за одновременное соединение шести и восьми корон вы получите неплохую премию! Собирая короны, следует помнить следующее правило:

Одиночная корона, задетая обычным ударом, перемещается через клетку, а две находящиеся рядом, - лишь на одну.

В некоторых игровых ситуациях это требует использования определенных тактик при сборе рядов.

Доступные виды корон

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

Трейлер игры Crown автор: SaiLight
Трейлер игры Crown автор: SaiLight

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

1 из 2: crown.zip
Скачать размер: 1.49mb

Логическая игра Crown - свежий взгляд на известную идею «три в ряд» от команды Perfect Light.

2 из 2: crown_source.zip
Скачать размер: 1.15mb

Исходный код игры, написанный на языке Pascal в среде программирования Delphi. Для запуска проекта потребуется библиотека Perfect Engine.


И немного о разработке

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

Адаптивный интерфейс

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

Касательно программного кода - был разработан специальный класс, обеспечивающий обработку адаптивного интерфейса на основе знаний, полученных при работе с css-стилями. Вкратце, структура дизайна «постранично» описывалась в ini-файле в процентных единицах, который затем считывался и обрабатывался указанным классом. Более подробно почитать о его работе, а также, скачать тестовый пример, можно в этой статье.

Кстати, сам класс оказался настолько удобным, что SpectreZ затем использовал его при разработке Galaxy Boom mini, реализовав при помощи него даже выбор персонажа в начале игры. Я же со временем стал замечать кучу недостатков в его структуре и написал отдельный компонент, описывающий работу «векторного объекта», на основе которого в дальнейшем можно будет создавать и более сложный интерфейс, «но это уже совсем другая история».

Разные рендеры

Как я уже упоминал выше, для вывода графики игра использует наш графический движок Perfect Engine. Даже не только использует, но и создана была для демонстрации его возможностей. Не знаю, насколько это актуально, но так как движок поддерживает возможность переключения рендеров (например, между выводом средствами видеокарты и обычным процессорным выводом), Crown реализует такую возможность - дает выбрать метод вывода при старте программы. Есть даже система автоматического выбора при отсутствии на компьютере видеокарты или ее драйвера.

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

  • CanvasRender
  • OpenGLRender
  • GenegalImages

Таким образом, дублируются только те изображения, которые необходимо дублировать.

Работа с мобильными устройствами

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

В данный момент игра стабильно работает как на компьютере, так и на мобильных устройствах под управлением операционной системы Windows. Все основные методы обработки жестов можно почерпнуть в исходном коде проекта.

В завершение

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

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

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

авторы: SpectreZ, SaiLight работа над проектом: 2015 год

Связанные проекты:

выложено уже 20 проектов из 124 созданных команда Perfect Light, 2017 год