КОТ++
Прикладное программирование
Системное программирование
Программирование микроконтроллеров

Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования. (c) Линус Торвальдс

Поиск по тегам

Опубликовано
Комментарии 0

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

Почему я не взял готовый движок? Во-первых, NIH, я уже писал про это (там я и сказал пару слов о движке), во-вторых, желание разобраться в работе движков. Движок был назван изначально EEngine – Egor Engine, это название я придумал ещё до момента, когда был выработан концепт движка, после того как уже был готовый движок у меня появилась небольшая капля скромности и название мне перестало нравиться. Но я его не стал менять, просто первую букву E нужно расшифровывать как-то иначе.

Концепт движка заключается в следующем: EEngine отрисовывает графику через GPU – graphics processing unit, на мобилках это видеочип, на компах это видеокарта. GPU по сути работает с 3D графикой, но мой движок 2D, а 2D для GPU это тот же 3D только без манипуляций осью Z, представьте плоский куб, у которого толщина равна 0, на передней и единственной грани рендерится (отрисовывается) текстура – спрайт.

Отрисовка производится шейдерами. Шейдеры – это программы для рендеринга, которые скармливаются GPU, они сообщают видеочипу как отрисовывать каждый пиксель. Так как GPU манипулирует только треугольниками, то в шейдере в общих словах алгоритм таков: рисуем два треугольника, два треугольника это по сути прямоугольник, потом берём текстуру и натягиваем поверх нарисованного треугольника – так мы получим отрисованный 2D спрайт. То есть каждый графический объект является прямоугольником из двух треугольников, такая конструкция называется мешом, меш – набор треугольников определяющих форму графического объекта.

Работа движка осуществлена с помощью паттерна «Игровой цикл», в общем виде игровой цикл должен выглядеть так:

while (1)
{
	processInput(); //обработка пользовательского ввода
	update(); //обработка логики игры 
	render(); //отрисовка
}

В бесконечном цикле вызываются у корневой сцены методы processInput(), render() и update(). Общая суть паттерна игровой цикл в том, что есть бесконечный цикл, а в нём последовательно обрабатываются пользовательский ввод (processInput), отрисовка (render), просчёт логики игры (update) и просчёт физики (физику не разбираю в этой статье). О игровых паттернах очень хорошо рассказано в этой книге, как раз таки в ней я о них и узнал.

Все графические объекты являются нодой (узлом) связного списка, в итоге возможность ноды иметь дочерние объекты порождает дерево графических объектов, отрисовка выполняется обходом по дереву, у каждой ноды берётся текстура и отрисовывается по необходимым координатам шейдером. Аналогичным образом идёт вызов метода update() у объектов. И аналогичным образом реализованы сигналы и слоты у элементов UI, реализовал работу сигналов-слотов будучи вдохновлённым Qt. UI элементы это те же графические элементы, но расширены функционалом сигналов-слотов для работы с пользовательским вводом. У UI элемента достаточно подписаться на определённое событие, добавив слот. Потом когда движок породит сигнал, что событие произошло, то также через обход дерева найдётся объект, который был подписан на этот сигнал.


root – корневая нода, с неё начинается обход дерева

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

После я принялся за разработку физического движка, к сожалению работу над физическим движком я не завершил до конца. Если у меня дойдут руки, то выложу материал по физическому движку.

Технические подробности (новичкам можно пропустить абзац): движок был написан на AS3, использован для мобильных игр на Adobe AIR, например эта. Движок я не выполнил отдельной библиотекой, поэтому исходники смешаны с исходниками самой игры по ссылке, потому что разрабатывал его параллельно с написанием игры. Изначально игра была написана чисто на Flash без движков, но настал момент, что потребовалась оптимизация, для оптимизации я решил написать свой движок. Шейдеры были написаны на AGAL – Adobe Graphics Assembly Language, адобовский мини ассемблер. Бесконечный цикл у меня реализован не особо привычном образом, флеш генерирует событие ENTER_FRAME строго соотвествуя FPS и я подключил цикл к этому событию.

Теги , , , , ,
Автор

Опубликовано
Комментарии 0

Splinter Jump – вторая игра моего авторства. Вдохновлённый игрой Doodle Jump, а она была очень популярная почти 8 лет назад, я решил сделать свою игру с похожей механикой. Кроме паскаля я тогда ничего не знал, соответственно, и эта игра была написана на паскале, в среде PascalABC.NET. Суть игры заключается в том, чтобы прыгать по платформам и добраться до верха и найти телевизор. На уровне разбросаны сыр и напитки. Сыр нужно собирать для зарабатывания очков, напитки дают улучшенный прыжок на ограниченное время. Игра полностью завершённая, в ней реализованы все задуманные уровни, в игре 10 уровней, в некоторых уровнях присутствуют боссы. Персонаж игры может атаковать, соответственно механика не ограничена только прыжками по платформам.

Через пару лет, когда изучил flash, то я решил переписать эту же игру на нём и загрузить её во ВК. Но к сожалению, ВК больше не поддерживают flash игры и они отключили мою игру. Первые четыре скрина – версия для windows, написанная на pascal, последние четыре скрина – flash версия для ВК, написанная в среде FlashDevelop, как видно по скрину была добавлена возможность поставить игру на паузу.

Исходный код pascal версии: https://bitbucket.org/Eg0r/splinter-jump




Теги , , , ,
Автор

Опубликовано
Комментарии 0

Классы были написаны на Delphi 7. Имеют в функционале: интерпретацию G-кода, расчёт траекторий для совместного движения осей (траектории строятся с учётом ускорений и торможений), низкоуровневый обмен пакетами с контроллером PLCM через UDP.

Основные классы в проекте:
TPLCM – обмен пакетами с контроллером
TMathTrajectory – расчёт траекторий
TCRC – вспомогательный класс для расчёта контрольной суммы пакета
TGCodeInterpreter – класс, который интерпретирует G-код
TPackageBuffer – буфер пакетов
TTrajBuffer – буфер траекторий

Так как расчёт траекторий процесс довольно не простой, то для класса, который считает траектории были написаны unit тесты, а также дополнительная программа для визуального отображения траекторий на графиках.
Так как связь по UDP, то было реализовано отслеживание потери пакетов и повторная отправка в случае потери. Документация протокола от разработчика контроллера не включала всех деталей, поэтому некоторые детали протокола были выяснены самостоятельно через программу Wireshark. С помощью Wireshark был пронализирован трафик, который шлёт ПО Mach3.
На скринах представлены небольшие программы, которые демонстрируют работу с данным набором классов.

Теги , , ,
Автор

Опубликовано
Комментарии 0

TMNT Nightmare Dreams – самая первая игра, которую я сделал, была написана ещё в школьные годы, а это примерно 8 лет назад с момента написания поста. Игра написана в среде PascalABC.NET. Для вывода графики использовались стандартные PascalABC и .NET Framework наборы классов. Для проигрывания аудио была использована библиотека Bass.NET. Именно в процессе работы над этой игрой я узнал и освоил ООП.
Игра содержит всего два уровня, 4 персонажа, 3 вида врагов, 3 удара, прыжки. Жанр игры – beat em up. До конца доделана она не была, я лишь написал основной функционал.




Теги , , ,
Автор

Опубликовано
Комментарии 0

EE Level Editor – тайловый редактор уровней. Написан на C#. Редактор был написан специально для моего 2D движка – EE.



Можно создавать и сохранять уровень в файл. Есть возможность прилипания тайлов друг к другу для удобного группирования тайлов мышкой. Вытягивание тайлов в стороны (быстрое размножение одинаковых блоков). Выделение и объединение нескольких тайлов. Показ границ объектов. Увеличение и уменьшение масштаба просмотра для удобного редактирования. Добавление тайлов в программу с помощью кнопки «Добавить тайл».

Теги , ,
Автор

Опубликовано
Комментарии 0

Batch Arch – оболочка над архиватором WinRAR, архивирует каждый найденный файл в индивидуальный .rar архив в указанной папке или дереве папок по маске. Фишка в том, что архивы файлов остаются в тех же папках где лежат (лежали) исходники, то есть с сохранением структуры папок. Написана на C#.

Возможность выбрать несколько папок или указать одну корневую папку с которой будем работать.
Маска для файлов, которые надо архивировать. Пустое окно означает, что надо архивировать все файлы. Каждый файл кладется в индивидуальный архив .rar или .zip, с именем архивируемого файла. Выбор метода сжатия. Возможность установки пароля. Выбор удалять ли файлы после архивации. Архиватор может работать в фоновом режиме. Выбор формата архива. Возможность протестировать архив по окончании архивации. Возможность создания самораспаковывающегося архива. Добавление информации для восстановления. Уведомление поверх всех окон об успешной окончательной архивации всех файлов. Возможность поставить процесс на паузу. В программе доступно два языка: русский и английский.

Batch Arch Версия 1.00.
Выпущена 31.12.2018.
Эта программа для бесплатного использования.
Программа поставляется как есть.

Авторские права:
Автор идеи и спонсор Евгений Мельников (e.ov) https://www.artstation.com/emelnikov
Автор программного кода Егор Княжев cat@catplusplus.ru

Теги , ,
Автор

Опубликовано
Комментарии 0

Proxy Checker – программа предназначенная для проверки прокси серверов на работоспособность.

Разработана мной на C# за 1 вечер. Изначально для личных целей, а потом подумал выложить для всех, программа простая, думаю многим пригодится)

Ссылка для скачки: Proxy Checker

Теги , ,
Автор

Опубликовано
Комментарии 0

FormatABC – программа предназначенная для организаций и частных лиц, которым необходимо быстро и правильно отправить на печать файл, имеющий разные форматы листов A0-A4. Программа автоматически определяет количество форматов A0-A4 в файлах с расширением «.pdf» и отправляет на печать.

Возможности программы:
-автоматическое определение количества листов;
-автоматическое определение принтеров;
-автоматическая отправка различных форматов на разные принтеры.

Для работы с программой Вам необходимо:
-зарегистрироваться;
-оплатить (на момент написания поста стоимость 1200р.);
-получить ключ;
-скачать программу;
-активировать ключ.

Описание от меня: программа разрабатывалась длительное время по заказу Дмитрия Ветошкина (formatabc@yandex.ru). Программа позволяет упростить печать PDF документов, в которых имеются листы различных форматов. Программа разработана на c# с использованием библиотеки PDFSharp, установочник написан с помощью InnoSetup.

Ссылка на сайт: http://formatabc.ru

Теги ,
Автор

Опубликовано
Комментарии 0

Туки-Тук – это удобный сервис для поиска и предоставления доступного жилья в короткие сроки.

Функционал:
- регистрация;
- верификация аккаунта по email и телефону;
- создание объявления о сдаче жилья в аренду;
- поиск объявлений по различным параметрам;
- бронирование объявлений;
- возможность выбор наилучшего кандидата для снятия жилья;
- рейтинги и отзывы.

Ссылка на сайт: http://tuki-tuk.com
Ссылка google play: https://play.google.com/store/apps/details?id=com.varvar.tuki_tuk

Теги ,
Автор

Опубликовано
Комментарии 0



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

Приложение разработано под Андроид с использованием технологий Adobe Air. Также в игра построена на базе моего движка, о котором можно прочитать тут. Все аспекты этого «секретного» движка можно будет узнать в следующих статьях.

Ссылка: https://play.google.com/store/apps/details?id=air.com.varvar.jihod

Теги , , ,
Автор

Опубликовано
Комментарии 0

Андроид приложение для водителей такси, позволяет выбрать интересующие заказы и взять на выполнение. Приложение является частью системы BasketTaxi.
Для использования приложение нужно сначала зарегистрироваться в системе как водитель такси. После авторизоваться под своим аккаунтом и можно начинать работу. Неавторизованным пользователям предоставляется возможность просмотреть все заказы, но без взятия на выполнение.
Имеется возможность выбрать интересующий город и категорию заказов (Новые, Горящие, Другие).

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

Ссылка: https://play.google.com/store/apps/details?id=basket.client

Теги ,
Автор

Опубликовано
Комментарии 0

Андроид приложение для заказа такси в городах: Абакан, Барнаул, Бердск, Бийск, Братск, Иркутск, Кемерово, Томск, Новосибирск, Томск, Улан-Удэ.

Главные функции программы:
- Точная стоимость поездки.
- СМС уведомления.
- Удобная форма для заказа такси.

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

Ссылка: https://play.google.com/store/apps/details?id=basket.calltaxi

Теги ,
Автор