Мой выбор в 33 года: Учу C++, чтобы создавать игры.

Привет! Меня зовут Илья, мне 33, я решил круто изменить свою жизнь, начав путь в инди-разработку игр.
В этом посте — история моего выбора между простыми инструментами и сложным C++, о сомнениях, поиске и первых, пусть и консольных, но уже работающих проектах.Примерно год назад мне в голову пришла идея создавать инди-проекты — игры. Мне захотелось создавать миры, в которых игрокам было бы приятно проводить время, увлекательно играть, наблюдать за историей интересных персонажей и с волнением делать выбор в сюжете, ожидая нетривиальных поворотов судьбы главных героев.

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

Я начал с видео-курсов на открытых ресурсах и быстро понял: нужно начинать с основ, а не просто учить язык без понимания.
Хотя я в целом представлял, что такое ПК, и более-менее знал, чем процессор отличается от видеокарты.
Выбрав движок Game Maker, я стал учить его язык — GML. Потратил на это несколько месяцев, что-то даже начал понимать, но ни о какой глубине речи быть не могло. Это было похоже на запоминание паттернов для разных ситуаций, а не на осознание, почему цикл работает «именно так, а не иначе».
Учить языки программирования без наставника — это крайне непросто.
Никто тебя не может направить, не подскажет, но я был непреклонен и решил изучать все самостоятельно.

На GML я потратил примерно 2-3 месяца, занимался каждый день, по часу в день. Конечно, это смешно даже для такого простого языка. Тем не менее, я достиг небольших результатов: мог написать несложную стрелялку с переходом между комнатами и рестартом уровней. Но понимание было настолько плохим, что я постоянно путался и не понимал, как исправить свои же ошибки. Я не мог даже нормально работать с рандомом. У меня была идея, чтобы цели для игрока двигались в рандомной позиции, вроде это получалось, однако было реализовано очень криво. Меня увлекало то, что персонажи на экране оживают, а мир живет по прописанной логике в коде. За этим очень интересно наблюдать.
И в один день я понял, что направление выбрано правильное, но чего-то не хватает — мне не хватает глубины, понимания в программировании. И я ушел в раздумья, забросив обучение, и те первые учебные проекты были удалены и забыты. Первая попытка по разработке инди-игр оказалась провальной.

Несколько месяцев я разбирался: какой язык программирования мне нужен? Зачем? Какие именно игры я хочу делать? Насколько серьезные знания мне нужны?

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

Почему С++? Ответ прост: универсальный язык. С ним можно пробовать разные движки, делать разные приложения, игры, можно написать свою физику и даже сам движок.
Хотя я понимаю, что для серьезной разработки, например — написания движка или физики, — нужны очень серьёзные знания и огромный опыт работы с языком С++, но мне нравится осознавать, что инструмент, который есть у тебя в руках для работы, — очень мощный и при этом гибкий.
Изучив его, можно двигаться куда угодно. Он не ограничен одним движком, как GML. Да, он на порядок сложнее, но зато дает свободу выбора в профессиональном плане.
Спросите, почему не Python или C#?
На Python я почему-то не обращал внимания, а с C# я вроде как начинал обучение (если это так можно назвать), а потом пришел к GML. Мне хотелось чего-то серьезного. Там, где будет вызов в обучении.
Возможно, таким образом я рассчитывал на приобретение той самой глубины и понимания в программировании. Трудно дать более рациональное объяснение в защиту моего выбора. Обычно про такие вещи говорят: «почувствовал». Понимаю, что выглядит это очень абстрактно, но вот так.

Мне повезло: нашелся хороший знакомый, который скорректировал мое обучение (при этом я учусь сам). Огромное ему за это человеческое спасибо!

У меня появилось видение, в какую сторону двигаться в обучении. Я прикупил пару книг по С++ и начал обучение с нуля.

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

Первый месяц я потратил на основыизучение архитектуры ПК (инженером, конечно, не стал, но азы узнал).
плюс уже два месяца изучаю сам С++.
В целом, сейчас у меня получается уделять учебе гораздо больше времени — от 3 до 5 часов в день.
И главное — приходит понимание, как это работает, что я пишу, почему здесь важнее цикл do-while , а не while.
Я не претендую на звание опытного разработчика игр на C++, но уже написал несколько проектов «в стол».
Подумал, что мне интересно получить по ним обратную связь, написать свою историю и делиться ей с людьми. Буду очень рад, если мой опыт кого-то вдохновит изучать программирование или делать игры.

Главное, что я понял во время обучения, — это практика!

моя первая игра "Гладиаторы"
моя первая игра "Гладиаторы"

Не стоит зарываться в книги, в которых по 2 тыс. страниц, и пересматривать видео-обучения в тысячный раз в надежде понять каждое слово. Я понял, что лучшая стратегия в этом следующая — изучил новую тему, прогнать ее пару раз, понять основу и вперед писать код. 70% практики и только 30% теории. Только так приходит пониманиепочему это работает? А почему это — нет?
У меня пока за плечами нет готового коммерческого проекта, не говоря уже об успешном. Но я думаю, что смогу осилить эту новую главу в жизни.

Честно, не знал, о чем писать в первом посте, поэтому посвятил его своему выбору и сомнениям на пути в геймдев. В дальнейшем планирую делиться скринами, идеями и набросками для игр.
В любом случае, до Нового года я планирую продолжать изучать C++ и писать проекты для себя (которыми все же буду с вами делиться и выкладывать на GitHub). А в следующем году хочу попробовать создать свой первый настоящий проект. Есть несколько задумок, но, скорее всего, это будет что-то вроде текстового квеста с простой векторной графикой, но с множеством вариантов выбора и неочевидной концовкой.

Особое место в моем сердце занимают игры студии Quantic Dream. Я понимаю, что на данном этапе не смогу делать такие проекты — для этого нужна как минимум сильная команда. Но взять интересную структуру — квесты с вариативностью и рандомом, где действия и концовки могут принимать неожиданные повороты, — это мне по силам.
Конечно, в идеале хочется прийти к проекту уровня игр Quantic Dream, но посмотрим, насколько я буду годен для коммерческой разработки игр. Ведь она упирается не только в код, время и деньги. Пока за всеми аспектами буду следить и реализовывать их только я.

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

Я уже начал выкладывать код на GitHub — вы можете почитать о моих проектах там, увидеть код с комментариями и даже попробовать игры, которые я пока делаю для себя (ручная сборка, так сказать). Пока это консольные текстовые игры без графики, но с логикой. Они рабочие и полностью законченные.

игровой процесс "Гладиаторы"
игровой процесс "Гладиаторы"

Со временем планирую проводить рефакторинг кода в старых проектах, потому что даже сейчас я вижу, что проект месячной давности выглядит ужасно, и его нужно переписывать.
Сделаю это позже, в свободное время. Хотя во многих проектах, которыми я делюсь на GitHub, код и напоминает «спагетти», он завершен, и проекты готовы.

Благодарю вас за внимание, уделенное моему посту. Если вам стало интересно — подписывайтесь, комментируйте. Для меня это будет топливом для развития.

Ссылка на мой GitHub:

32
18
6
74 комментария