Игра «Crown»

Теги: Программирование, Delphi, Игры
История:

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

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

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

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

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

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

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

Трейлер игры Crown

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

crown.zip (1.49mb) Логическая игра Crown - свежий взгляд на известную идею «три в ряд» от команды Perfect Light.
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 год

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

+
Фильтрация по тегам
Выбранные теги отобразятся в этой области...
Найти
Программирование 37, Игры 16, Программы 12, Delphi 28, Библиотеки 15, Карты для Warcraft 1 Веб-разработка 23, Сайты под ключ 7, Дизайн 22, JavaScript 5, PHP 0, Laravel 0, Joomla 2 Графика 31, Обработка фото 6, Логотипы 2, Иллюстрации 9, Рисунки 4, Печатная продукция 1, Стикеры 2 Видео 12, Трейлеры 2, Анимация 3 Миры 1, Музыка 5, Персонажи 9, Статьи 7, Литература 5, Рассказы 4, Стихи 1, 2D 6, 3D 23, На заказ 12
Используйте среднюю кнопку для быстрого фильтра по тегу...
Календарь проектов
2008 3 , 2009 5 , 2010 7 , 2011 2 , 2012 3 , 2013 6 , 2014 4 , 2015 10 , 2016 6 , 2017 7 , 2018 2 , 2019 5