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

Введение

Я отношу себя к молокососам старой школы игр, которые работают в текстовом режиме. Эти игры работают в консоли и отображают свою «графику» в виде символов, которые расположены в разных местах экрана, используя при этом всего 16 цветов. Кроме того, такие игры легко создавать в C# и .NET используя класс System.Console, который позволяет позиционировать курсор, делать анимацию, перемещая блоки буфера, использовать цвета и специальные символы, а также реагировать на действия пользователя. В этой обучающей статье, я ознакомлю вас со всеми инструментами для создания игр в ретро MS-DOS стиле, включая завершенную игру, которую вы сможете создать сами.

После того, как я написал книгу Head First C# я точно понял одно, что создание игры является отличным способом, чтобы улучшить ваши навыки на C#. Я приложил много усилий, чтобы помочь людям выучить C# и я часто получаю вопросы типа: «Что я должен делать, чтобы получать опыт?». Я думаю имеет смысл создавать игры в виде больших проектов для обучения и экспериментов, потому что вы начинаете с хорошим представлением о том, что вы будете делать. Так одной из целей данной статьи – дать вам что-то новое и интересное. Я надеюсь, что это лучший способ получения большого опыта и оттачивания навыка разработки на C#.

Совет №5. Участвуйте в игровых джемах

Игровые джемы (англ. game jam) — это мероприятия, целью которых становится разработка новых игр в ограниченный срок. Как правило, на создание прототипа участникам даётся двое суток, а тема и условия обычно объявляются перед началом джема.

Юля Кожемяко объясняет, почему так важны эти события: «На джеме есть ограниченный срок, ты не будешь несколько месяцев сидеть без результата, а получишь его через два-три дня… Ты увидишь, что можешь сделать, пусть даже в команде с другими ребятами. На джеме нет возможности прокрастинировать. Нужно полностью сосредоточиться на игре».

Здесь действует тот же принцип, что и с показом игры друзьям. Джемы позволяют не работать «в стол», а показать своё творчество другим участникам и, возможно, профессионалам из индустрии. Там же можно завести знакомства с будущими коллабораторами. В частности, с Ильёй Кононенко, соавтором игры The Tender Cut, вдохновлённой «Андалузским псом», Юля Кожемяко впервые встретилась именно на джеме.

Настройка интерфейса

В стандартном интерфейсе проекта шесть элементов рабочей области:

  1. Верхняя панель инструментов — в ней находятся стандартные вкладки File, Edit, Help, как во многих других интерфейсах, а также вкладки Assets, GameObject, Components и Window.
  2. Scene — окно сцены, в котором выстраивается игровое пространство (элементы игрового мира, текстуры, фигурки персонажей и прочее).
  3. Games — это окно игры, в котором можно посмотреть глазами пользователя, как будут двигаться элементы и работать игровые механики.
  4. Hierarchy — окно иерархии, в нем перечислен список всех элементов (GameObject), которые помещены в окно Scene.
  5. Project — это система папок, в которых хранятся ассеты по категориям (текстуры, шрифты, звуки и т.д.).
  6. Inspector — окно для изменения элементов игры, их размера, цвета, положения в пространстве и других характеристик.

Совет №7. Работайте регулярно

Старая пословица гласит: «Быстро — это медленно, но без перерывов». То же правило действует в геймдизайне.

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

Алексей Малороссиянов объясняет: «Изучать программирование непросто и требует определённого майндсета. Но когда начинает получаться, вы испытываете огромное удовольствие от результата… Не сдавайтесь и планомерно каждый день хотя бы немного времени уделяйте разработке и изучению движка. И всё у вас обязательно получится».

2D анимация

У вас есть два варианта для создания 2D анимации:

  • Кадр за кадром. Здесь вам придется рисовать каждый кадр анимации и затем соединять их воедино. Для этого вам следует использовать спрайт- листы вместе с TexturePacker (или, если вы используете Unity — Sprite Packer).
  • Скелетная анимация. Нарисуйте все нужные конечности объекта и затем анимируйте, меняя их положение относительно предыдущего состояния. Этот способ анимации быстрее, проще и сэкономит место на вашем жестком диске, по сравнению с анимацией «кадр за кадром». Если вы решили создать 2D анимацию и используете движок Unity — попробуйте начать с анимации спрайтов или Anima2D.

Обработка нажатий кнопок мыши

Теперь добавим функции обработки нажатия левой клавиши мыши (далее — ЛКМ) и установки флажка по щелчку правой клавиши мыши (далее — ПКМ). Если по нажатию ЛКМ мы открыли клетку, а там находится мина, то следом открываем всё поле — игра окончена:

while (app.isOpen())
{
// Получаем координаты курсора мышки относительно окна нашего приложения
Vector2i pos = Mouse::getPosition(app);
int x = pos.x / w;
int y = pos.y / w;

Event e;

while (app.pollEvent(e))
{
if (e.type == Event::Closed)
app.close();

// Определяем, была ли нажата кнопка мыши?
if (e.type == Event::MouseButtonPressed)

// Если была нажата левая кнопка мыши, то открываем клетку
if (e.key.code == Mouse::Left) gridView = gridLogic;

// Если была нажата правая кнопка мыши, то отображаем флажок
else if (e.key.code == Mouse::Right) gridView = 11;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

while(app.isOpen())

{

// Получаем координаты курсора мышки относительно окна нашего приложения

Vector2i pos=Mouse::getPosition(app);

intx=pos.xw;

inty=pos.yw;

Evente;

while(app.pollEvent(e))

{

if(e.type==Event::Closed)

app.close();

// Определяем, была ли нажата кнопка мыши?

if(e.type==Event::MouseButtonPressed)

// Если была нажата левая кнопка мыши, то открываем клетку

if(e.key.code==Mouse::Left)gridViewxy=gridLogicxy;

// Если была нажата правая кнопка мыши, то отображаем флажок

elseif(e.key.code==Mouse::Right)gridViewxy=11;

}

Настало время запустить приложение «Сапер» и посмотреть на готовый игровой процесс:

Симулятор нейросети

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

Нейросеть — это связанные между собой процессоры (нейроны), обрабатывающие информацию. Программисты проектируют нейросеть так, чтобы она обучалась решению задачи сама. Для этого используют, например, Python или С++, а для обучения готовят большие массивы данных — дата-сеты. Например, чтобы нейросеть могла распознавать лица, программисты создадут архитектуру нейросети, подходящую для поиска закономерностей в фото лиц людей (этому мы учим на курсе по нейронным сетям). Все остальное нейросеть сделает сама: нужно лишь провести через нее множество реальных фотографий для обучения.

Construct 2

Проекты на этом движке: Insanity’s Blade, Mortal Melon, DinoSystem.
Construct 2

Как создаются видеоигры от идеи до продажи

Разбор всех этапов разработки видеоигр начиная от цели будущего проекта и заканчивая старатом продаж….

Плюсы Construct 2:

  • Не нужно писать код, идеально подойдет новичку;
  • Множество инструментов для простой разработки 2D игр;
  • Интуитивно понятный интерфейс, легко разобраться с тем, как создавать игры.
  • Неудобно использовать для 3D игр;
  • Чтобы сделать игру более проработанной, придется платить;
  • Редко появляются обновления движка с новыми возможностями. Как правило, просто шлифуется готовое.

Скачущий мяч

Теперь я заставлю мяч перемещаться по полю. В случае JavaScript-кода я ссылался в HTML на файл ping.js точно так же, как делал это с CSS. Я добавлю этот код в новый файл с тем же именем. Я создам объекты для мяча и каждого из игроков, но буду использовать для объектов шаблон фабрики.

Это простая концепция. Функция Ball создает новый мяч, когда вы вызываете ее. Использовать ключевое слово new не требуется. Этот шаблон исключает некоторую путаницу вокруг переменной Ball, проясняя доступные свойства объекта. А поскольку у меня всего час на создание этой игры, нужно свести к минимуму любые запутанные концепции.

Структура этого шаблона, когда я создаю простой класс Ball, показана на рис. 6.

Рис. 6. Класс Ball

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

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

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

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

Хотя этот код работает, может возникнуть проблема, если скрипт начинает выполняться до полной загрузки страницы. Чтобы избежать этого, я запускаю код, когда страница загружена, и использую для этого jQuery:

Поскольку я знаю скорость мяча (velocity) и время с момента ее последнего обновления, я могу выполнить некоторые простые физические расчеты, чтобы перемещать мяч вперед:

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

Рис. 7. Простая физика отскакивания мяча

Классы исходника

Исходный код игры построен на 5-ти классах.

  • Rocket — класс производный от класса Sprite пространства имен SFML.Graphics. Функция класса вычисление направления и полет ракеты к цели.
  • Asteroid — класс содержащий в себе объект класса SFML.Graphics.Spite. Функции перемещение небесного тела и анимация взрыва.
  • Window2D — класс производный от RenderWindow принадлежащему пространству имен SFML.Graphics мультимедийной библиотеки SFML Окно для рендеринга полета ракеты к астероиду на фоне пространства космоса.
  • GameProcess — класс запуска цикла игры.
  • Program — класс приложения. Имеет главный метод Main автоматически вызывающийся средой .NET Core при запуске приложения. Функция класса запуск приложения.

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

Играем стильно

Если бы вы загрузили эту страницу, то ничего не увидели бы, потому что никакого стиля не применено. Я уже подготовил ссылку на файл main.css в своем HTML, поэтому помещу все CSS в новый файл с тем же именем. Первым делом я позиционирую все элементы на экране

Тело страницы должно занимать весь экран, поэтому сначала я уделяю внимание этому:

Во-вторых, мне нужно, чтобы арена была заполнена фоновым изображением (рис. 3):

Рис. 3. Фоновое изображение для арены

Далее я размещаю табло. Я хочу, чтобы оно находилось вверху по центру — поверх других элементов. Команда «position: absolute» позволяет разместить его где угодно и оставить там: 50% — позиционирует табло посередине верхней части окна, но начиная с самой левой части элемента табло (scoreboard element). Чтобы гарантировать точную центровку, я использую свойство transform, а свойство z-index обеспечивает, что табло будет всегда находиться поверх других элементов:

Я также хочу использовать текст со шрифтом в стиле ретро. Большинство браузеров позволяет включать собственные шрифты. Я счел подходящим шрифт Press Start 2P от codeman38 (zone38.net). Чтобы добавить шрифт к табло, я должен создать новое начертание шрифта (font face):

Теперь результаты (scores) находятся в теге h1, поэтому я могу задать этот шрифт для всех тегов h1. На случай отсутствия этого шрифта я предусмотрю несколько запасных вариантов:

Для других элементов я буду использовать таблицу изображений-спрайтов. Таблица спрайтов (sprite sheet) содержит все необходимые игре изображения в одном файле (рис. 4).

Рис. 4. Таблица спрайтов для Ping

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

Любому элементу, имеющему изображение в этой таблице, будет назначен класс sprite. Тогда для каждого элемента я буду использовать background-position, чтобы определить, какую часть таблицы спрайтов мне нужно показывать:

Затем я добавлю класс sprite ко всем элементам, которые будут использовать таблицу спрайтов. Для этого мне придется ненадолго переключиться на HTML:

Теперь мне нужно указать позиции каждого спрайта в таблице для каждого элемента. И вновь я буду делать это с помощью background-position, как показано на рис. 5.

Рис. 5. Добавление смещений для таблицы спрайтов

Свойство position: absolute в player, opponent и ball позволит мне перемещать их по полю, используя JavaScript. Если вы посмотрите на страницу теперь, то увидите, что к элементам управления и мячу прикреплены ненужные куски. Дело в том, что размеры спрайтов меньше 128 пикселей по умолчанию, поэтому я подстраиваю их под правильный размер. Мяч всего один, и я задаю его размер напрямую:

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

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

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

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

Совет №3. Соберите прототип и покажите его друзьям

«Не откладывайте на потом практическую часть», — рекомендует Кирилл Золовкин. Как только вы немного разобрались в движке, пришло время делать прототип — модель будущей игры, предназначенную для тестирования игровых механик.

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

Замечательная серия видео от Extra Credits по теме

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

Где обучаться созданию игр

  • SkillBox — онлайн-университет, который предлагает сразу несколько курсов для желающих внедриться в сферу разработки игр. «Профессия геймдизайнер» это — обучение созданию игр от концепции до релиза. Используется движок Unity. Длительность обучения 8 месяцев, компания оказывает помощь в трудоустройстве, обеспечивает участие в реальных проектах.
  • Нетология приглашает на курс «Геймдизайнер», в процессе которого кроме изучения базовых технологий обучающиеся создадут реальные проекты, необходимые для трудоустройства. Разработка прототипа собственной игры — на популярном движке Unreal Engine, программа обучения включает не только планирование и написание кода, но и ознакомление с маркетингом.
  • Факультет разработки игр Онлайн-университета Mail.Ru приглашает на обучение и предлагает отправиться на собеседование с рекомендациями со своей полностью готовой игрой. Акцент — на практику, освоение актуальных технологий. Эти курсы по созданию игр хороши тем, что  они проходят на реальном факультете реального университета. Обучением занимаются опытные разработчики с высшим образованием, имеющие ученые степени, практикующие программисты.
  • Udemy — видеохостинг, где можно ознакомиться с большим количество разных курсов на любой вкус. Одни из самых популярных — Разработка игр на Unity 3D, Разработка HTML5 игр на Phaser 3. Можно также изучать геймдев на практике в процессе создания игры. Хороший пример — курс «Шахматы на C# и Unity», с помощью которого можно научиться программированию на C# и созданию игр на   телефоне.

6 полезных математических функций для Python

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

Python — один из самых популярных языков программирования. Его используют в веб-разработке, дата-сайенсе и даже в разработке игр. Например, на Python писали код для World of Tanks, Civilization IV и Battlefield 2. Python хорошо подходит для новичков: кода для программ на нем нужно писать меньше, чем в других популярных языках. Подробнее о том, кому и зачем он нужен, читайте в нашем разборе. 

Работа со скриптами

За поведение игровых объектов отвечают присоединенные к ним компоненты (Components). Базовый компонент любого объекта — Transform, он отвечает за положение элемента в окне Scene, возможность поворачивать и масштабировать его. К базовому компоненту можно добавить, например, Renderer, который меняет цвет, или RigidBody, который отвечает за массу и физику объекта. Но кроме базовых компонентов, объектам можно задавать особые условия, и для этого как раз используются скрипты.

Создать новый скрипт можно в окне Project, кликнув мышкой на Assets –> Create –> C# Script.

Двойным кликом мыши скрипт открывается в текстовом редакторе. Скрипты, как и все остальное в Unity, прописываются на С#, так что для создания сложных проектов разработчикам все же придется освоить этот язык.

Базовые элементы скриптов — это:

  • using — элемент в коде, который подключает библиотеки;
  • public class — в этой строке обычно прописан класс MonoBehaviour, он содержит набор функций, необходимых для работы скрипта;
  • void — те самые функции, с их помощью прописываются действия, происходящие в игре.

Рассмотрим, например, функцию start. Любое действие в ней произойдет только один раз, когда запустится игра. Пропишем здесь print (“Hi”).

И можно заметить, что в консоли это слово выводится один раз.

Функция update — повторяющаяся, ее можно использовать, например, для передвижения объекта. Для этого в скрипте задается переменная int i = 0, она выводится на экран с помощью функции print (i) и увеличивается на одну единицу за каждый шаг с помощью i++.

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

Совет №6. Составьте график разработки

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

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


Скриншот из Never Again

В посте, посвящённом разработке Never Again, Валентин Щекин даёт совет по составлению графика: «…Есть негласное правило разработчика: время, заложенное на разработку, нужно умножать на два. Не верьте! Нужно умножать на четыре».

Ловим мяч

Я хочу, чтобы игроки ловили скачущий мяч. Когда он пойман, у него появляется владелец, и он следует движениям владельца. На рис. 10 в метод move мяча добавлена функциональность, позволяющая мячу перемещаться вслед за владельцем.

Рис. 10. Заставляем мяч следовать за своим владельцем

На данный момент способа получить позицию объекта Player пока нет, поэтому я добавлю аксессоры getPosition и getSide в объект Player:

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

Первый шаг в реализации класса player — заставить функцию move изменять позицию игрока.

Рис. 11. Обнаружение коллизии для мяча и игроков

Если вы сейчас попытаетесь поиграть в эту игру, то обнаружите, что мяч отскакивает от верхнего края экрана и что можно двигать игрока, чтобы поймать мяч. А как бросить мяч? Для этого и предназначены элементы управления по правую руку. На рис. 12 игроку добавлена функция fire, а также свойство aim.

Рис. 12. Свойство aim и функция fire для мяча

Код на рис. 13 дополняет функцию, связанную с клавиатурой. Он задает aim и fire объекта игрока. Прицеливание работает слегка иначе. Когда клавиша прицеливания освобождается, задается прямое направление (straightforward).

Рис. 13. Подготавливаем функцию прицеливания для игрока

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

Blender Game Engine

Blender Game Engine — игровой движок, который является частью пакета 3D моделирования Blender. Blender Game Engine был разработан много лет назад, но, спустя столько времени, так и не был популярен в кругу геймдевелоперов, а связано это вот с чем: Blender Game Engine создан для разработки несложных 2D и 3D игр, потому что имеет слабую физику по сравнению с конкурентами. Конечно, есть Rigidbody, есть элементарная физика, но нет смысла прописывать программисту то, что давно встроены в другие игровые движки. Также в этом игровом движке используется язык программирования Phyton, что не очень удобно. Но у Blender Game Engine есть плюсы: 1 — можно сразу редактировать и добавлять 3D модели, если что-то на сцене не устраивает, 2 — можно использовать русскую документацию на сайте Blender, 3 — удобный рендер, выдающий большой фпс. Если выбирать Blender Game Engine, то только для разработки небольших проектов, для знакомства с геймдевом.

Пример игр, созданных на Blender Game Engine, взятых с Youtube.com:

Скачать с официального сайта: Blender

Делаем игру немного умнее

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

При разработке системы такого рода хорошо мыслить состояниями. ИИ оппонента имеет три возможных состояния: following (следует), aiming/shooting (прицеливание/бросок) и waiting (ожидание). Начнем только с объекта AI:

В зависимости от состояния AI (ИИ) я хочу, чтобы он выполнял разные действия. По аналогии с мячом я создам функцию update, которую смогу вызывать в requestAnimationFrame, чтобы AI действовал в соответствии со своим состоянием:

Состояние FOLLOWING достаточно простое. Оппонент перемещается в вертикальном направлении мяча, и AI переходит в состояние WAITING, чтобы добавить некоторое замедление реакции. Эти два состояния показаны на рис. 15.

При разработке системы такого рода хорошо мыслить состояниями.

Рис. 15. Простое состояние FOLLOWING

Используя код с рис. 15, AI выбирает между следованием за мячом и ожиданием доли секунды. Теперь добавляем код в функцию update уровня всей игры:

Запустив игру, вы увидите, что оппонент следует за перемещениями мяча — не такой уж и плохой ИИ, состоящий менее чем из 30 строк кода. Конечно, если оппонент поймает мяч, он ничего делать не будет. Поэтому на излете отведенного мне часа пора заняться обработкой действий для состояния AIMING. Я хочу, чтобы ИИ заставлял вашего оппонента случайным образом перемещаться несколько раз, а затем кидать мяч в случайном направлении. На рис. 16 добавлена закрытая функция, которая именно это и делает. Добавление функции aimAndFire к выражению case с AIMING создает полнофункциональный ИИ, против которого интересно играть.

Рис. 16. ИИ прицеливается и бросает мяч

Urho3D

Бесплатный кроссплатформенный движок для работы с 2D и 3D, основанный на языке C++ и выпущенный по свободной лицензии Массачусетского технологического института (MIT). Название в переводе с финского означает «герой». Движок частично вдохновлён OGRE и Horde3D. Свободно распространяется на портале GitHub.

Преимущества:

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

Недостатки:

  • высокий порог вхождения для тех, кто не знает основы С++;
  • сложная установка: нужно скачать архив, скомпилировать движок с помощью CMake, включить необходимые параметры (при этом убедиться, что все необходимые папки есть в наличии);
  • перегруженный интерфейс.

Игры на движке: Clinically Dead, Borderline, HellBreaker.

«<…> Я выбрал движок Urho3D, чтобы менять исходный код под свои нужды. На своём опыте я убедился, что это потрясающий инструмент, который поддерживается небольшим, но очень отзывчивым сообществом. Если вы разработчик и находитесь в поиске мультиплатформенного (Windows, Mac, Linux) бесплатного игрового движка — Urho3D обязателен для ознакомления».

Павел Могила (Pawel Mogila), инди-разработчик (Clinically Dead).

Блог разработчика, сентябрь 2015 года


Clinically Dead

Ren’Py

Бесплатный движок с открытым кодом для создания визуальных новелл. С 2004 года его используют во всём мире для разработки коммерческих и бесплатных игр в этом жанре. Разработчики Ren’Py просят авторов зарегистрировать игру в специальном разделе сайта, посвящённого движку, независимо от модели её распространения. Сейчас в разделе числится более 4 500 игр.

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


Tidy Bunny — игра, созданная на Ren’Py

Преимущества:

  • кроссплатформенность (MacOS, Windows, Linux);
  • простой скриптовый язык;
  • совместимость с популярными расширениями файлов (PNG, JPG, MP4, MP3);
  • руководство и интерфейс на русском языке;
  • множество инструментов для кастомизации.

Недостатки:

  • необходимость знать Python для создания спецэффектов;
  • редкие сложности с портированием на мобильные платформы;
  • поддержка игр в браузерах — в бета-версии.

Игры на движке: «Бесконечное лето», «Зайчик», Katawa Shoujo, ALLBLACK Phase 1, Doki Doki Literature Club! , Highway Blossoms, Over The Hills And Far Away

«<…> Для ПК Ren’Py — хороший выбор: простота разработки, относительно низкие требования к железу и широкие возможности кастомизации (те же моды). Правда, на мобильных устройствах он ведёт себя совершенно по-другому. Проблемы начинаются уже на слабых девайсах: чтобы поиграть, нужно иметь как минимум гигабайт оперативки и нормальный процессор».

Dreamtale, сценарист и CEO Soviet Games («Бесконечное лето»).

«Soviet Games о Love, Money, Rock’n’Roll», IGN Russia, сентябрь 2018 года


«Бесконечное лето»

Заключение

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

Michael Oneppo — креативный технолог и бывший менеджер программ в группе Microsoft Direct3D. В последнее время работает в качестве главного технического директора в технологической некоммерческой компании Library For All и ведет исследования по программе NYU Interactive Telecommunications Program для получения степени магистра.​

Выражаю благодарность за рецензирование статьи эксперту Магомету Амину Ибрагиму (Mohamed Ameen Ibrahim).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector