11

Переход от ООП к ECS при разработке игр

Когда-то у меня было мало опыта в разработке и я решил - буду делать игру, используя ООП.
Это ведь популярная парадигма разработки.
И сделал. Я придумал достаточно оригинальную идею игры, реализовал базовую механику за пару недель и убедился что игра жизнеспособна.

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

Спустя несколько лет я накопил опыта и познакомился с паттерном ECS (Entity-Component-System). Он решает задачу улучшения гибкости, модульности и производительности систем. Вспомнил про игру и пошёл искать библиотеку ECS для python (игра на нем).Сущеуствующие библиотеки ECS для python оказались не идеальны, если сказать мягко.

В итоге я написал свою реализацию:
https://github.com/ikvk/ecs_pattern
https://pypi.org/project/ecs-pattern/
И воспользовался ей для создания своей игры.
Использование ECS дало свои плоды: писать код стало в удовольствие, появилась гибкость и модульность.

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

*Игра называется "Trig fall", размещена в rustore, vkplay, appgallery.

Спасибо за внимание :)

Больше постов читайте по тегу «Программирование». А если хотите изучить новую профессию, посмотрите актуальные курсы от проверенных школ с реальными отзывами на сайте Пикабу Курсы.

Программирование на python

928 постов11.9K подписчиков

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу