Начало пути в геймдеве (первое знакомство с кодом):
В 2014 году у меня возникло непреодолимое желание погрузиться в программирование. Я дал себе обещание в течение месяца освоить основы, чтобы понять, как создаются простейшие 2D-игры. Профессиональных наставников под рукой не было, а моя работа никак не была связана с IT — чистый энтузиазм.
Первым делом я попытался найти обучающие материалы, но большинство книг казались сухими и утомительными, что быстро гасило мой пыл. Я не понимал, с чего начать, а теоретические выкладки казались оторванными от практики: было сложно связать абстрактную логику с написанием игрового цикла.
Тогда пришла логичная идея: раз я хочу делать игры, значит, нужно искать туториалы по конкретным проектам — например, «змейке» или «арканоиду». Так я нашел **YouTube**-каналы, посвященные разработке на **GameMaker**. Это стало отправной точкой.
Я до дыр затирал свою первую «змейку», модифицируя её бесконечное количество раз. Аппетит рос: следом пошли арканоиды, тетрисы, настольные игры, платформеры, системы частиц и даже сетевые шахматы. Через эту практику в голове естественным образом уложились все фундаментальные понятия: переменные, массивы, структуры данных, условия и циклы.
Амбиции растут
Войдя во вкус, я загорелся идеей воссоздать культовую классику: **Civilization** или **Dune: The Battle For Arrakis**. Мне казалось, что достаточно просто заполучить исходники — и дело в шляпе.
Я взялся за **Civilization**, не подозревая, сколько подводных камней меня ждет. С маниакальной дотошностью я извлекал графику, попиксельно перерисовывал анимации и взялся за воссоздание глобальной карты с тайлами и бесконечной прокруткой.
Затем последовали: управление курсором, поведение юнитов, дорожная сеть, типизация клеток (горы, степи), игровые интерфейсы и механика городов. Однако на этапе разработки системы управления городами стало очевидно, что простого реверс-инжиниринга графики недостаточно. Потребовались исходные алгоритмы, которых было не достать.
Проект забуксовал. Без понимания внутренних механизмов игры я зашел в тупик, и моя мотивация начала угасать. Ниже представлены скриншоты тех трудов.




Новое вдохновение
Вскоре мое внимание переключилось на **Dune 2: The Battle For Arrakis** — мою любимую игру с **Sega**. Оказалось, что у неё огромное сообщество фанатов, и найти материалы оказалось куда проще.
Учитывая прошлый горький опыт с **Civilization**, я решил не копировать стратегию «один в один», а выбрать более подходящий для моих сил жанр **Tower Defence**. Идея заключалась в создании сессионных уровней с небольшим игровым полем.
Я провел реверс-инжиниринг анимаций из эмулятора **SEGA GENS**, однако тут же возник вопрос: как реализовать передвижение юнитов? Встроенные инструменты казались черным ящиком, но я решил погрузиться в тему поиска путей. В итоге, спустя три месяца, я выпустил свою первую завершенную игру с 10 уровнями, тремя режимами сложности и встроенным редактором карт.
Демонстрация геймплея на “YouTube”:
Ссылка на исполняемый файл (“GoogleDrive”):




Алгоритмы поиска пути и выгорание
Успех не принес успокоения — мне хотелось большего. Я снова взялся за полноценную стратегию по мотивам **Dune**, стремясь к идеальной адаптации оригинала.
Однако на этапе внедрения алгоритма поиска пути я столкнулся со стеной. Нативный функционал **GameMaker** работал медленно и был лишен гибкости. Я изучил всё: трассировку, волновой алгоритм, HPA, A*, Dijkstra, JPS (Jump Point Search). Чтобы добиться приемлемой скорости, мне пришлось даже освоить C++ и написать свою DLL-библиотеку. Но реализовать сложную логику, включая работу с бинарными кучами для **JPS**, так и не удалось в полной мере.
В тот момент мои силы иссякли. Я осознал, что бесконечные эксперименты с алгоритмами привели меня к тупику, и переключился на системное программирование на C++, которое увлекло меня гораздо больше.
Полезные материалы по теме:
Статья про алгоритмы поиска пути (Рязанцев Д.Д., Жиляк Н.А.): PDF-файл
Визуализатор алгоритмов: PathFinding.js
Квантовая механика глазами программиста:
Меня всегда интриговал «квантовый мир». Наблюдая за популярными экспериментами, вроде опыта Юнга, я поймал себя на мысли, что они пугающе похожи на логику работы игрового движка.
Свет ведет себя не как частица-пуля, а как волна? В программировании это переменные в памяти или итерации циклов, которые мы не видим, но которые определяют результат. Две щели и интерференция? Это в точности напоминает работу алгоритмов поиска пути на дискретной сетке графов, где веса ячеек и эвристики меняют путь сигнала.
Эта аналогия стала для меня ключом к пониманию квантовых парадоксов. Разве наши технологии — процессоры и алгоритмы — появились случайно? Я склонен полагать, что программирование — это «самоподобие» вселенского масштаба.
● Квантовое «зерно» метафоры:
Представьте наш мир как бесконечную 3D-сетку координат. Фотон — это «волновой пакет» или спрайт с размытыми краями (альфа-каналом), где центр имеет максимальную вероятность существования. Движок реальности постоянно пересчитывает веса ячеек вокруг объекта (согласно ^Принципу наименьшего действия), что создает иллюзию волновой функции.
Когда фотон «выстреливается», движок просчитывает все возможные пути. Вероятность появления фотона в конкретной точке напрямую зависит от накопленного «сервисного веса» — суммы всех возможных маршрутов в этой точке. Это не магия, а работа движка по оптимизации вероятностей.
Даже знаменитый эксперимент с квантовым ластиком, кажется, обретает логику: если мы «истощаем» память пути детекторами, мы обрываем связь с информацией о маршруте, что «схлопывает» интерференционную картину. Всё в рамках логики вычислений в реальном времени.
Конечно, это лишь моя попытка интерпретации, но именно взгляд через призму разработки позволил мне увидеть в этих сложных физических процессах понятную и стройную структуру.


