Какой язык программирования выбрать для написания игр. Как начать писать игры

💖 Нравится? Поделись с друзьями ссылкой

Что вы делаете, когда вы играете в какую-то игру и несколько раз не можете пройти одно и то же место? Можно просто найти уже готовое прохождение . Это, конечно, здорово, но что, если вы застряли в разработке игры? Какой гайд прочитать? Так пусть наша статья станет вашим пошаговым руководством к разработке вашей первой игры, если вы все еще не начали ее писать. Если уже начали, то вам все равно не помешает прочитать наши советы - быть может, увидите что-нибудь новое.

Прежде, чем мы начнем, мы хотим привести вам пример первой игры от автора этой статьи. Это была простая текстовая игра под названием Divine Blood:

Это была самая первая игра, причем запрограммированная для калькулятора TI-83 Plus . Позднее она была переписана автором на Java во время обучения в старших классах. Примечательно, что игра так и не была закончена.

Ко всеобщему сожалению, не доводить игры до логического конца - одна из самых распространенных проблем начинающих разработчиков. Соответственно, возникает вопрос: как повысить свою продуктивность и все-таки закончить начатый проект? Ответ прост: прочтите наше «прохождение» разработки игры.

Основные этапы

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

  • планирование;
  • прототипирование;
  • программирование;
  • релиз.

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

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

Уровень 1: Планирование

Помните, сделав 90% игры, вы думаете, что потратили 90% своего времени. А доделывая оставшиеся 10%, вы тратите еще столько же «оставшегося» 90% времени. Составляйте план, учитывая это. - Ян Шрейбер

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

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

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

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

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

Основная проблема первого этапа - притупить свое желание кодить и начать планировать. Написать код вы всегда сможете, для этого у вас будет целый этап. Спланируйте как можно больше аспектов вашей игры.

А боссом этого уровня являются вопросы. Просмотрите на все свои заметки и убедитесь в том, что у вас нет каких-либо непонятных пунктов: ни в используемых инструментах, ни в алгоритмах и прочем. Если же у вас действительно все вопросы решены, то вы смело можете считать, что уровень «Планирование» закончен. Но если остались непонятные аспекты - решите их, прежде чем переходить дальше.

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

Уровень 2: Прототипирование

Дизайн это процесс, а не результат. - Кристофер Симмонс

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

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

Если вы получаете удовольствие от какой-либо игры, то вы захотите поиграть в нее снова, независимо от того, сколько очков или денег вы там набрали. - Стэн Яроцки

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

Вы помните секретные телепорты в игре Super Mario Bros? Игрок мог найти хорошо спрятанные трубы, прыгнув в которые можно было пропустить несколько уровней. Так и здесь. Правда, мы не полностью пропускаем прототипирование, а совмещаем его с планированием.

Хотим заметить, что первые два этапа взаимозаменяемы. Быть может, вы хотите проверить основную механику вашей игры, прежде чем потратите кучу времени на детали? А может, вы хотите попробовать какую-то возможность в вашей игре? Это основные причины, почему есть смысл в том, чтобы поменять порядок первых двух этапов.

Хорошая игра - это поток интересных задач, решаемых игроком. - Брюс Шелли

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

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

Уровень 3: Программирование

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

Чтобы начать этот этап, вам стоит определиться с целевой платформой вашей игры. Будет эта игра для консолей, а, может быть, мобильная или вовсе браузерная? Определившись с платформой, выберите необходимый инструментарий и язык программирования.

На самом деле эти два шага можно выполнить в обратном порядке. Имея какую-либо среду разработки (или язык программирования), вы можете проанализировать ее возможности и решить, что вы сможете написать.

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

«Я не умею рисовать» - используй клипарт. «Я не умею создавать звуки» - ищи MIDI файлы. «Я не умею программировать» - никого это не волнует, не программируй! - Роб

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

Но вы не должны унывать! Лучшее решение этих проблем - отвлечься от проекта на несколько дней. Вы очистите ваш ум и позволите новым идеям посетить его. Также неоднократно замечено, что «утро вечера мудренее». Застряли? Не знаете как решить проблему? Ложитесь спать, а на завтрашнее утро вы, возможно, сразу поймете причину ваших неудач. Не работайте до изнеможения и не изнуряйте себя: работа над проектом должна быть в удовольствие.

Если вы пытаетесь и не можете решить действительно сложную проблему - остановитесь. Решите более простую проблему, которая выполняет те же действия, что и сложная. - Даниель Кук

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

Уровень 4: Релиз

Никогда не сдавайся. - Элис Тейлор

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

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

Начиная создавать игру, не смотрите на результаты других. Создайте то, что хотите вы. - Роб

А финальным боссом всего нашего путешествия будет являться ваша гордость. Вы сделали полноценную игру от начала и до конца! На самом деле, не все могут похвастаться этим.

Каждый разработчик когда-нибудь напишет «плохую» игру. Если вы еще не написали - напишете. Все мы напишем. - Бренда Ромеро

И помните, дорога к успеху вымощена многократными неудачами. Никогда не сдавайтесь!

Вывод

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

А теперь соберитесь и напишите свою игру!

Путь в индустрию игровых разработок не близок. Эта статья призвана помочь понять с чего лучше начать это путешествие.

Вы только что закончили ваш первый курс по С++ и хотите начать делать игры. Кто-то указал вам на этот сайт и вы, возможно, поэкспериментировали немного с руководством . Вы изучили несколько лаконичных примеров, но не нашли руководства о том, как сделать целую игру. И на то есть причина.

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

Выбор проекта

Итак, с чем же начать? Проще ответить с чего начинать не стоит, а именно с больших проектов, типа полноценной 3D FPS, MMO или даже длинного платформера 16-битной эпохи. Самая распространенная ошибка начинающих разработчиков это начать с большого проекта основанного на Крутой Идее или взять проект, который кажется простым, и закончить с полузаконченной кучей спагетти-кода. Поначалу следует создавать небольшие проекты.

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

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

Принимая во внимание все выше написанное, вот пара советов с чего начать.

Графика и обработка событий

Если вы никогда не программировали ничего связанного с графикой или GUI, вам следует начать с чего то маленького, чтобы «обмочить ноги». Моим первым проектом были крестики-нолики, так что даже у меня было скромное начало. Пара идей для первого проекта:

Цель вашего первого проекта перейти от консольной разработки к разработки событийных графических приложений. Он так же научит вас фундаментальным основам игровой логики и архитектуры. Я рекомендую что-нибудь пошаговое, потому что игры с движением это совсем другой зверь.

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

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

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

Синхронизация, движение, столкновения, анимация

Теперь, когда вы наигрались с графикой, пора заняться чем-нибудь в реальном времени. Вот пару предложений:

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

Duck Hunt и Pong - хорошие проекты для тех, кто уже имеет опыт в программировании графики и событий. В них есть простое обнаружение столкновений и все важные основы игр в реальном времени.

Space Invaders и Galaga - хороший выбор для второго/третьего проекта. В них есть уровни, поэтому вам нужно будет узнать как передвигаться от уровня к уровню, при помощи конечного автомата. Вы можете прочитать про конечные автоматы . Игры в стиле «перестреляй их всех» так же требуют создать простые шаблоны поведения для врагов, что является шагом в сторону искусственного интеллекта.

Тетрис хорош для второго/третьего проекта. В нем совсем немного логики нужной для создания игры-головоломки. Это игра приличного размера, так что вам придется научиться разделять вашу программу на несколько исходных файлов, о чем вы можете больше прочитать . Не недооценивайте Тетрис. Я недооценил и только посмотрите на это жуткое месиво в коде Lazy Blocks.

Переинженеринг

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

Когда я был начинающим я переинженерил AI для крестиков-ноликов. Я хотел сделать игру с непобедимым AI. Мне удалось достигнуть этого, запрограммировав компьютер на знание всех возможных ловушек. Звучит круто не правда ли? Это заняло почти 40 000 тысяч строк в основном скопированного кода и месяц моего свободного времени.
Позже я выучил структуры данных и узнал про алгоритм Минимакс, который при меньшем размере кода не только делал нужное, но еще и делал это лучше.

Так что учитесь на моих ошибках и не будьте излишне амбициозны. Концентрируйтесь на обучении тому как делать игры, а не просто делайте их.

Планирование, анализ столкновений, физика, уровни, искусственный интеллект





Теперь, когда у вас за плечами две или три маленьких игры, пришло время сделать первый крупный проект.

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

Теперь про вашу следующую игру. Break Out и Puzzle Bobble хороши для третьего проекта, потому что они включают в себя продвинутое распознавание столкновений и физику. Физика важна, поскольку дает игре реалистичное ощущение. Даже в Super Mario Brothers есть ощущение гравитации и инерции. Бильярд отличный проект для тех, кто хочет напрячь извилины физикой.

В играх типа бильярда вам нужно не только обнаруживать столкновения, но и обрабатывать их в определенном порядке. Обработка столкновений разительно отличается от их обнаружения. Хотя создание бильярда или 2D платформера может показаться простым делом, анализ столкновений в правильном порядке - запутанный процесс, и не должен быть недооценен.

Break out и Puzzle Bobble так же включают дизайн уровней и требуют загрузки и освобождения их ресурсов. Хорошим опытом будет создание редактора уровней для игры. Редакторы позволяют вам легко создавать уровни и не вынуждают впаивать их в приложение. У меня есть про создание редактора уровней.

Так же вы возможно хотите попрактиковаться в написании искусственного интеллекта (AI). Один из вариантов - вернуться к крестикам-ноликам или четырем в ряд и написать непобедимый AI. Теперь вы уже должны знать структуры данных и сможете использовать знания о деревьях для использования алгоритма Минимакс. С этим алгоритмом вы можете просчитать все возможные исходы крестиков-ноликов и создать непобедимый AI. Забавно расстраивать им своих друзей. Так же вы возможно захотите сделать разные уровни сложности. Игра не приносит радости, если в нее нельзя выиграть.

Pac Man - отличный способ попрактиковаться в написании AI. Нужно будет знать структуры деревьев/графов и алгоритмы поиска, типа A*, для того чтобы призраки могли пройти через лабиринт. Так же нужно будет сделать чтобы призраки работали в команде. Все это пригодится когда вы будете делать игры со сложным AI, типа стратегий в реальном времени. Об основах AI можно прочитать .

Платформеры, Action/Adventure, RPG, RTS, движки





Теперь, когда вы получили опыт создания хорошо спланированной игры, вы готовы к созданию Action/Adventure/Платформера. Это будет кульминация графики, движения, анимации, анализа/обнаружения столкновений, физики, AI, программной архитектуры и всего остального, что вы изучите к этому моменту. Тем кто более амбициозен, можно предложить сделать стратегию в реальном времени(RTS) или ролевую игру(RPG). Будьте осторожны, потому что RPG и RTS действительно огромные проекты.

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

RTS также сложны архитектурно, а так же требуют много AI. Вам нужно будет делать поиск пути для юнитов, получение ими команд, разное поведение в зависимости от полученных команд. Если вы никогда до этого не делали AI, будет лучше начать с клона Pac Man"а для начала.

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

Другая распространенная среди новичков ошибка - это попытка создать движок в качестве первого проекта. И обычно это универсальный движок. Вам не нужен движок с фантастической графикой для создания Pong"а или Space Invaders. Программируя, легко закопаться в деталях. Концентрируйтесь на общей картине и завершайте свои игры.

Сеть

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

Добавление сети значительно усложняет игру. Когда один игрок что-то делает, вы должны послать информацию об этом всем остальным. Это все равно что если бы ваша правая рука не знала о том, что делает левая. Так же вам придется выбирать между загрузкой сервера и тем что он может контролировать. Чем больше делает серверная часть, тем меньше возможностей жульничать у клиента, но это также означает большую нагрузку на сервер. Для action и других игр с высоким темпом геймплея, вам придется беспокоится о сетевой задержке и потере пакетов.

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

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

3D игры

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

Хорошая новость в том, что если вы уже сделали 4 или 5 игр, вы уже знаете основы необходимые для создания игры. Вы уже хорошо знакомы с процессом разработки и знаете свои возможности как программиста. Неважно трехмерный шутер или двухмерный, он по прежнему шутер. 2D RPG или 3D RPG по прежнему RPG.

Не считайте это оправданием пропустить 2D и сразу перейти к 3D. Прежде чем научиться бегать, нужно научиться ходить.

Быстрый способ

Говорите, что вы учитесь быстрее если сразу возьметесь за дело и будете просто писать вашу 3D MMOFPSRTSRPG и научитесь тому, что нужно по мере необходимости? Чтож, вот пару советов, которые вам помогут:
  1. Идите на местный рынок
  2. Купите целую рыбину. Рекомендую взять лосося или треску, хотя и сом тоже подойдет. Форель, кстати, тоже довольно эффективна
  3. Идите домой и включите компьютер
  4. Запустите вашу любимую IDE
  5. Теперь возьмите купленную рыбу и влупите себе по голове
  6. Повторите пункт 5, пока мысли о быстром способе не покинут вас
Вы не научитесь алгебре решая вычислительные задачи. Вы учите основы и опираетесь на них. Тоже самое и с программированием. Если вы ищите быстрый способ я тут как тут, чтобы сказать вам что его нет. Не торопите себя. Еще раз: учите основы и опирайтесь на них. Иначе вас ждет фиаско.

Путешествие начинается

Теперь, чтобы у вас было общее понимание того что же все-таки делать, пора начать заниматься игроделом. Я не ожидаю что вы будете следовать этому руководству слово в слово. Все учатся по разному и с разной скоростью. Если вы что-то и должны были вынести из этой статьи, так это три вещи:
  1. Выберите свой темп
  2. Доделывайте игры до конца
  3. Концентрируйтесь на обучение, а не просто на создании
Удачи вам на пути разработки игр!

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

Разработка компьютерных игр
Можно с полной уверенностью заявить, что процесс разработки компьютерных игр является одной из сложнейших задач в области информационных технологий. Все дело в том, что для создания хорошего игрового проекта требуется обладать довольно большим объемом информации. Так, например, необходимо знать несколько языков программирования, уметь писать простой и понятный программный код, в котором нет ничего лишнего. По этой причине разработкой компьютерных игр, как правило, занимаются крупные команды геймдев, состоящие из сотен специалистов различных областей. Имеются, конечно, и исключения из правил. Так, например, известный программист Маркус Перссон создал «Майнкрафт» в одиночку. На сегодняшний день эта игра является одним из наиболее прибыльных проектов за последнее десятилетие. Однако, чтобы разработать нечто подобное, необходимо быть настоящим профессионалом своего дела и иметь огромный опыт работы.

Создание игр: программирование

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

Языки программирования
Наиболее универсальным языком программирования на сегодняшний день является С++. Большинство компьютерных игр и движков для них пишутся именно на этом языке программирования. В чем же особенность данного языка? Основное преимущество С++ состоит в огромном количестве всеобъемлющих библиотек. Благодаря этому обстоятельству посредством данного языка программирования можно написать все что угодно, начиная от небольшой игры, заканчивая крупным проектом класса ААА. Однако, C++ очень сложен в освоении. Разобраться в этих дебрях новичку вряд ли будет по силам. Именно по этой причине лучше всего начать знакомство с миром программирования с чего-то более простого.

Лучшим выбором для начинающего геймдева будет Python. Этот язык программирования имеет достаточно простой синтаксис. Чтобы начать программировать на Python достаточно прочитать туториал и обладать определенным знанием английского языка. Возможности данного языка программирования довольно широки. Конечно, Python в этом смысле не угнаться за С++ в плане функционала. Однако при помощи Python можно разработать вполне достойный софт. Именно на Python написаны такие популярные компьютерные игры, как Симс 4, Цивилизация 4 и Батлфилд.

Еще одним претендентом, достойным внимания пользователей, является язык Java. Главное преимущество данного языка заключается в его кроссплатформенности. Это значит, что программное обеспечение, написанное посредством языка Java, поддерживается всеми типами операционных систем, в том числе Windows, Linux и Android. Это дает возможность быстро модифицировать игру под любую платформу. Кроме этого, Java также предоставляет программисту множество возможностей. Не нужно далеко ходить за примерами. Упомянутая выше «Майнкрафт» была написана как раз на языке Java.

Создание компьютерных игр без навыков программирования
Что делать, если времени на изучение языков программирования нет, а написать свою игру очень хочется? В данном случае вам на помощь придут так называемые игровые конструкторы. Что они собой представляют? Ответ на этот вопрос вы сможете найти, прочитав данную статью. Конструктор игр представляет собой специальную программу, которая объединяет в себе интегрированную среду для разработки и движок. Иначе говоря, это софт, с помощью которого можно без программирования создавать свои игры. Если вы только начали знакомиться с процессом разработки компьютерных игр, то такие конструкторы – именно то, что вам нужно. С помощью таких программ вы легко сможете понять, как осуществляется процесс разработки, на что необходимо обратить пристальное внимание. Однако у подобных программ имеются и некоторые недостатки. Конструкторы игр обладают довольно бедным функционалом. Такие программы накладывают определенные ограничения на пользователя в плане графики, жанра, механики и т.д. Скорее всего именно по этой причине у пользователя вряд ли получится создать достойный проект при помощи конструктора.

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

Одной из самых популярных программ для разработки компьютерных игр является Game Maker. Данная программа предназначена для создания двумерных проектов. В ней вы сможете создавать собственные компьютерные игры без навыков программирования. Вместо строчек пользователю предоставляется набор уже готовых действий. Нужно только создать новые объекты и определить правила, по которым они будут взаимодействовать. Стоит также отметить, что прямо в Game Maker можно рисовать спрайты без использования сторонних программ. По этой причине данное программное обеспечение является довольно самодостаточным. Game Maker также понравится и продвинутым пользователям, которые уже имеют определенные навыки программирования. В этой программе существует возможность добавления собственного исходного кода. При помощи Game Maker можно создавать компьютерные игры с видом сверху и сбоку.

Еще одним конструктором для разработки 2D-игр является Construct 2. Главной особенностью данной программы является мультиплатформенность. При помощи Construct 2 можно создавать компьютерные игры для Windows, Android, iOS и других систем.

Разработка игр на плаву, она перспективна и набирает популярность. Мы подготовили подробную инфографику о пути изучения разработки игр.

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

0. Разработка игр для детей

Многие книги ориентированы на работу с легендарной и интуитивно понятной средой разработки для детей Scratch, в том числе ScratchJr. После базиса следует информация о Python Pygame. Есть книга для пятилетних, но большая часть материалов подойдет для детей в возрасте от 8 лет.

1. Информатика

Теоретическая подковка – обязательная составляющая, без которой дальнейшее изучение лишено смысла. Эта подборка обучающей литературы включает в себя основы, сведения об алгоритмах и математику в разрезе изучения информатики.

2. Языки программирования

Разговаривать на языке компьютера непросто, но возможно. И таких способов уйма. Например, язык C существенно повлиял на индустрию ПО, поделившись своим синтаксисом с популярными C#, C++ и Java. C++, в свою очередь, является мощным языком для создания эффективных программ и программных комплексов. Многие также пишут игры на C#: язык шустрый, удобный и позволяет быстрее стартовать разработку.

А вот Lua перенял кое-что от C++. Скрипт-язык хорош для игровой логики. Он упростит инициализацию уровня, привязку задач к объектам, смену поведения NPC в интерактивном режиме без необходимости перекомпилировать проект и многое другое.

3. Создание приложений

И если информатика – это базис теоретический, то здесь больше практики. Разработка игр – ухабистая стезя, и начать лучше с приложений. Книги с практическими заданиями, а также информацией о паттернах и UML помогут разобраться, что к чему.

4. Математика для разработки игр

Нет, здесь не будет школьного курса алгебры и геометрии. Подборка разбита на основы математики в сфере геймдева и более продвинутый уровень.

5. Игровое программирование

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

6. Разработка игрового движка

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

7. Компьютерная графика

Да, содержимое – это важно, но именно компьютерная графика является аналогом интерфейса приложения, который будут видеть пользователи. Поэтому ей стоит уделить особое внимание.

Недаром этот раздел самый большой. Сюда включены основы программирования с Real-Time 3D, DirectX и OpenGL. Все дополнено информацией о рендеринге и технологиях. Отдельного внимания в подборке удостоились Direct3D и OpenGL.



8. Игровое аудио

Разработка игр касается и аудио: это звуки, издаваемые NPC, главным героем, явлениями или предметами, а также музыка. Аудио программирование обошлось всего двумя книгами, но в них доступно изложена необходимая информация.

9. Игровая физика и анимация

Один из самых сложных этапов. Кроме программной основы и картинок, должны быть законы, по которым все это взаимодействует. Игровая физика и анимационное программирование раскрыты в 17 книгах. Отдельно затронута имитация жидкости.

10. Игровой искусственный интеллект

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

11. Многопользовательское игровое программирование

Разработка игр для одного игрока сильно отличается от многопользовательских вариантов. Здесь нужно учитывать соединение, работу потоков и другие нюансы. Подборка разбилась на статьи и книги о серверном программировании, сетевом программировании и сетевом протоколе.

Для начала надо определиться с несколькими вопросами, потому что ответить на вопрос в общей форме "На каком языке писать игру?" невозможно в принципе.

Во-первых, какую игру вы собираетесь писать? Варианты ответа:

    Игру ААА-класса, чтоб убер-графика, убер-эффекты, всё реалистичное, чтоб у игрока челюсть отваливалась от одного скриншота.

    Серединка-наполовинку: полу-инди с полу-убер-графикой.

    Хлам для мобилок и браузеров: геймплей - ничто, монетизация - всё!

    Тру-инди: из графики только пикселизованные монстрики. Вся суть - геймплей!

Во-вторых, кто вы по профессии? Варианты ответа:

    Крутейший специалист по компьютерной графике, доктор по алгебре и дискретной математике, ассемблер - ваш родной язык, шейдеры пишете с закрытыми глазами.

    Простой смертный программист.

    Первый раз видите компьютер вживую. Про языки программирования что-то в последний раз слышали в школе.

В-третьих, кто вы по отношению к игре?

    Шестерёнка в компании.

    Только сейчас задумались о гейм-деве.

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

*1* Если вы крутейший специалист, то вы не читаете этот вопрос. Пропускаем.

1*1 Если вы заправляете разработкой ААА-игр, то вы тоже не читаете этот вопрос.

**2 Если вы работаете на кого-то, то выбора у вас нет. Ха-ха-ха.

1** Если вы хотите заниматься разработкой игр AAA-класса, то есть некоторый выбор.

13* Если вы простой смертный, решивший приобщиться к разработке самых дорогих игр, то выбора особо нет.

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

Для мелких фиговин, типа скриптов для управления интерфейсом, могут использоваться другие языки - менее шустрые, но которые легко обновлять и писать: Lua и прочие. Обычно они составляют не самую большую часть логики.

Или вы уже разрабатываете, или только собираетесь - выбора у вас нет, C++ надо изучать, если хотите заниматься разработкой всерьёз, а не клепать скриптики.

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

22* Если ваша игра обойдётся без самой совершенной графики, и вы умеете программировать, то у вас уже есть выбор.

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

Если нагрузка на CPU ограничена, то вы можете воспользоваться тем фактом, что CPU - отдельно, GPU - отдельно. Если вы даже из самого медленного языка отправите на отрисовку пучок графических операций, то они отработают быстро, потому что они будут выполняться отдельно от вашего тормозного кода. Сейчас, когда компьютеры стали достаточно быстрыми, часто ресурсов хватает на все дополнительные тормоза, которые возникают из-за управляемого кода (C#, Java и т.д.).

Отдельно надо упомянуть сборку мусора: чем сложнее логика, чем вы придирчевее к частоте кадров, тем менее доступным становится это удобство. Если логика разрастётся, то с большой вероятностью может оказаться, что от сборки мусора вообще придётся отказаться и повсеместно использовать пулы и прочие подобные средства. Дело в том, что сборка мусора, какой бы быстрой она ни была, на данный момент слишком медленная, чтобы не приводить к пропущенным кадрам. Мусор, генерируемый со скорость 60 кадров в секунду, разрастается слишком быстро.

23* Если вы ничего толком не умеете, то писать сложные игры в качестве первой попытки не стоит. Начните с чего-нибудь попроще.

42* Если графика у вас относительно простая, а сложных ресурсоёмких алгоритмов нет, то ваш выбор становится очень широк.

Вы можете писать абсолютно на чём угодно! Игру можно писать на любом интерпретируемом языке, который на порядки медленнее оптимизированого кода на C++. Какая разница, если игрок не заметит?

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

Если у вас есть какая-никакая команда, то лучше всё-таки считаться со мнением окружающих и не использовать языки и инструменты, про которые никто не слышал. Даже если ваша текущая команда знает их, потом может оказаться, что найти замену человеку невозможно. Используйте проверенные временем инструменты, используйте мейнстримовые языки программирования. Может, это и ухудшит производительность труда, но риск оказаться ни с чем будет заметно ниже.

43* Если вы не умеете программировать, то вы на распутье: вам или надо научиться программировать, или воспользоваться более простыми средствами разработки игр.

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

Но есть и путь проще: движки для игр, предназначенные для непрограммистов. Там вы будете рисовать нужное вам, расставлять свойства, копировать скриптики и смотреть, как оно всё шевелится. Но чем сложнее игра, тем больше нужно кода. Подобные движки часто сильно ограничивают свободу творчества, поэтому выбирайте сами, в каком направлении лучше двигаться.

3** И напоследок: если вы пишете для мобилок и браузеров, то вы имеете уникальную возможность настолько же быстро упираться в аппаратные ограничения, как и игры ААА-класса (которые для мобилок существуют с точки зрения денег, но не с точки зрения результата, но это так, лирическое отступление).

Здесь ваш выбор будет сильно ограничен платформой (или платформами). Для одной платформы "родной" один язык, для другой - другой. Выбор, на чём писать кросс-платформенные игры, невелик. Писать код на управляемых языках придётся немного по-другому, уделяя пристальное внимание сборке мусора. Здесь вы будете убиваться об стенку, чтобы ваша игра нормально работала на всех устройствах.

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

P.S. Я ещё не рассмотрел тьму тьмущую вещей: для какой платформы вы пишете, как выбирать движок и т.п. Считайте это общим вектором, а не инструкцией по применению.

Рассказать друзьям