06/04/25-НПС Разработка простой 2D игры

/Ливинский Марчел Александрович, Херсонский государственный педагогический университет; 620091, Россия, г. Херсон, пр-т Космонавтов, 26; mars180606@mail.ru/

Аннотация:  в современном мире разработка игр является одним из наиболее динамично развивающихся направлений программной инженерии, требующим комплексного применения знаний из различных областей: программирования, дизайна, математики и психологии пользовательского опыта. Данная статья представляет собой описание процесса разработки простой 2D-игры с использованием современных инструментов и методологий программной инженерии.

Ключевые слова: программирование, игра, программная инженерия, платформа, инструменты, система, функции, интерфейс.

06/04/25-NPS Developing a simple 2D game

/Livinsky Marchel Aleksandrovich; Kherson State Pedagogical University; 620091, Russia, Kherson, Kosmonavtov Ave., 26; mars180606@mail.ru/

Abstract:  in the modern world, game development is one of the most dynamically developing areas of software engineering, requiring the integrated application of knowledge from various fields: programming, design, mathematics and psychology of user experience. This article describes the process of developing a simple 2D game using modern software engineering tools and methodologies.

Keywords: programming, game, software engineering, platform, tools, system, functions, interface.

Введение. Игровая индустрия в настоящее время является одной из самых быстрорастущих отраслей развлекательной сферы. По данным аналитической компании Newzoo, глобальный рынок игр в 2023 году оценивается в 187,7 миллиардов долларов, с ежегодным ростом около 8,7%. При этом сегмент мобильных игр составляет более 50% от общего объема рынка. Такой стремительный рост обуславливает высокий спрос на квалифицированных специалистов в области разработки игр.

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

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

1. Компонентно-ориентированная архитектура [3] (Component-Based Architecture)

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

— Повышение модульности и переиспользуемости кода

— Упрощение процесса расширения функциональности

— Более гибкая структура игровых объектов

Большинство современных игровых движков, включая Unity [2], Unreal Engine и Godot, используют компонентно-ориентированную архитектуру в качестве основы.

2. Архитектура, основанная на данных (Data-Driven Architecture)[2]

Этот подход предполагает отделение данных от кода, что позволяет изменять поведение игры без необходимости перекомпиляции. Конфигурация игровых объектов, уровней и механик хранится в отдельных файлах (JSON, XML, YAML и т.д.), которые загружаются и интерпретируются во время выполнения. Преимущества:

— Возможность изменения игры без программирования

— Упрощение процесса балансировки и настройки

— Более эффективное разделение труда между программистами и дизайнерами

3. Событийно-ориентированное программирование (Event-Driven Programming)

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

— Слабая связанность между системами

— Упрощение добавления новых функций

— Более понятная структура взаимодействий

4. Объектно-ориентированное программирование (Object-Oriented Programming)

Классический подход, при котором игровые сущности представляются в виде объектов с определенными свойствами и методами. Часто используется в сочетании с другими подходами. Преимущества:

— Интуитивно понятная структура кода

— Хорошая поддержка в большинстве языков программирования

— Обширная теоретическая база и документация

5. Процедурная генерация контента (Procedural Content Generation)

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

— Возможность создания практически бесконечного количества уникального контента

— Снижение затрат на ручное создание контента

— Повышение реиграбельности

При разработке игр широко применяются различные архитектурные паттерны, которые помогают структурировать код и упростить решение типовых задач [4]. Рассмотрим основные паттерны, которые были использованы в рамках данной статьи:

1. Model-View-Controller (MVC)

Паттерн MVC разделяет приложение на три основных компонента:

— Model (Модель) — отвечает за данные и бизнес-логику

— View (Представление) — отвечает за отображение данных пользователю

— Controller (Контроллер) — обрабатывает ввод пользователя и обновляет модель

В контексте игровой разработки:

— Модель представляет собой игровое состояние (положение объектов, счет, здоровье и т.д.)

— Представление отвечает за рендеринг игровых объектов и интерфейса

— Контроллер обрабатывает ввод пользователя и обновляет игровое состояние

2. Entity-Component-System (ECS)

ECS — это архитектурный паттерн, который расширяет компонентно-ориентированный подход:

— Entity (Сущность) — это контейнер для компонентов, представляющий игровой объект

— Component (Компонент) — содержит данные, но не содержит логики

— System (Система) — содержит логику, которая обрабатывает сущности с определенными компонентами

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

3. Observer (Наблюдатель)

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

— Обновления интерфейса при изменении игрового состояния

— Реагирования на действия игрока

— Синхронизации различных систем

4. State (Состояние)

Паттерн State позволяет объекту изменять свое поведение при изменении внутреннего состояния. В играх этот паттерн часто используется для:

— Управления состояниями игры (меню, игровой процесс, пауза)

— Реализации конечных автоматов для ИИ противников

— Управления анимациями персонажей

5. Factory (Фабрика)

Паттерн Factory предоставляет интерфейс для создания объектов без указания их конкретных классов. В игровой разработке этот паттерн используется для:

— Создания игровых объектов (враги, снаряды, бонусы)

— Генерации уровней

— Создания эффектов

6. Singleton (Одиночка)

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

— Управления игровыми ресурсами

— Реализации менеджеров (аудио, ввод, сохранение)

— Доступа к глобальному состоянию игры

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

В рамках данной статьи были применены паттерны MVC для организации общей структуры приложения, Observer для реализации системы событий, State для управления состояниями игры и Factory для создания игровых объектов.

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

1. Кинематика и динамика твердых тел

Основные концепции, используемые в физике твердых тел для 2D игр:

— Позиция и скорость — базовые параметры, определяющие движение объекта

— Ускорение — изменение скорости со временем, включая гравитацию

— Масса и инерция — определяют, как объект реагирует на приложенные силы

— Силы и импульсы — вызывают изменение движения объекта

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

2. Обнаружение и разрешение коллизий

Обнаружение коллизий — это процесс определения, когда два объекта пересекаются. Основные методы обнаружения коллизий в 2D:

— Проверка пересечения прямоугольников (AABB) — простой и эффективный метод для объектов прямоугольной формы

— Проверка пересечения окружностей — используется для объектов круглой формы

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

— Пространственное хеширование — оптимизация для эффективной проверки большого количества объектов

Разрешение коллизий — это процесс реакции на обнаруженные коллизии, включающий:

— Расчет точки контакта и нормали

— Применение импульса для отталкивания объектов

— Учет трения и упругости

3. Физика частиц используется для моделирования эффектов, таких как дым, огонь, вода и т.д. Основные концепции:

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

— Силы — гравитация, ветер, притяжение/отталкивание

— Время жизни

Основная часть.  Для разработки 2D игры были выбраны следующие инструменты:

— Игровой движок: Unity 2D

— Язык программирования: C#

— Графический редактор: Adobe Photoshop для создания спрайтов

— Аудиоредактор: Audacity для обработки звуковых эффектов

— Система контроля версий: Git с хостингом на GitHub

— Система управления проектом: Trello

Выбор Unity обусловлен его широкими возможностями для 2D разработки, обширной документацией и активным сообществом разработчиков.

Проектирование игры

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

Основные компоненты игры:

— Игровой персонаж с возможностью перемещения и прыжков

— Система уровней с нарастающей сложностью

— Коллекционные предметы (ключи, монеты)

— Препятствия и ловушки

— Система подсчета очков

— Меню и пользовательский интерфейс

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

В процессе реализации игровой механики были разработаны следующие компоненты:

— Система управления персонажем с использованием Input System

— Физическая модель для реалистичного перемещения и прыжков

— Система коллизий для взаимодействия с объектами игрового мира

— Логика сбора предметов и подсчета очков

— Система перехода между уровнями

— Механика препятствий и ловушек.

Для игры был разработан пользовательский интерфейс, включающий:

— Главное меню с опциями «Новая игра», «Настройки» и «Выход»

— Игровой HUD, отображающий количество собранных предметов и текущий счет

— Экран паузы

— Экран завершения уровня

— Экран «Game Over»

Интерфейс был реализован с использованием системы Unity UI с адаптивным дизайном для различных разрешений экрана.

Выводы. В данной статье были рассмотрены основные аспекты создания 2D-игры [21]. Такие игры пользуются популярностью как среди игроков, так и среди разработчиков. Для достижения успеха очень важно качественное проектирование игры  и удовлетворение потребностей  игровой аудитории. Разработка игр может быть в дальнейшем расширена и улучшена путем добавления новых уровней, игровых механик, улучшения графики и оптимизации производительности. Также возможна адаптация игры для различных платформ, включая мобильные устройства и веб-браузеры.

Список источников и литературы

1. Адамс Э. Основы геймдизайна. – СПб.: Питер, 2018. – 640 с.

2. Шолль Г. Разработка игр на Unity 2018 за 24 часа. – М.: Эксмо, 2019. – 464 с.

3. Мартин Р. Чистая архитектура. Искусство разработки программного обеспечения. – СПб.: Питер, 2018. – 352 с.

4. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. – СПб.: Питер, 2020. – 368 с.

5. Nystrom R. Game Programming Patterns. – Genever Benning, 2014. – 354 p.

6. Gregory J. Game Engine Architecture. – CRC Press, 2018. – 1242 p.

7. Millington I. Game Physics Engine Development: How to Build a Robust Commercial-Grade Physics Engine for your Game. – CRC Press, 2019. – 535 p.

8. Schell J. The Art of Game Design: A Book of Lenses. – CRC Press, 2019. – 600 p.

9. Madhav S. Game Programming Algorithms and Techniques: A Platform-Agnostic Approach. – Addison-Wesley Professional, 2013. – 350 p.

10. Swink S. Game Feel: A Game Designer’s Guide to Virtual Sensation. – Morgan Kaufmann, 2008. – 384 p.

11. Ferrone H. Learning C# by Developing Games with Unity 2020. – Packt Publishing, 2020. – 528 p.

12. Hocking J. Unity in Action: Multiplatform Game Development in C#. – Manning Publications, 2018. – 400 p.

13. Thorn A. Mastering Unity 2D Game Development. – Packt Publishing, 2016. – 384 p.

14. Fowler M. Patterns of Enterprise Application Architecture. – Addison-Wesley Professional, 2002. – 560 p.

15. Лафоре Р. Объектно-ориентированное программирование в C++. – СПб.: Питер, 2018. – 928 с.

16. Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгоритмы: построение и анализ. – М.: Вильямс, 2019. – 1328 с.

17. Седжвик Р. Алгоритмы на C. – М.: Вильямс, 2017. – 1056 с.

18. Макконнелл С. Совершенный код. – СПб.: БХВ-Петербург, 2017. – 896 с.

19. Страуструп Б. Программирование: принципы и практика использования C. – М.: Вильямс, 2016. – 1328 с.

20. Дейтел П., Дейтел Х. C++: как программировать. – М.: Бином, 2017. – 1008 с.

21. https://cyberleninka.ru/article/n/etapy-proektirovaniya-2d-igry-platformera/viewer  (дата обращения: 10.04.2025).

Поделиться ссылкой:

Оставить комментарий

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