Перейти к основному содержимому

9.02. Как разрабатывают игры

Родителям и детям
Как разрабатывают игры
Добавить mermaid схему
Добавить задачи

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

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


1. Идея и замысел: «А что, если…?»

Всё начинается с простого вопроса: «А что, если…?»
А что, если бы динозавры не вымерли и умели строить города?
А что, если бы ты мог управлять временем — останавливать его, ускорять, отматывать назад?
А что, если бы твой домашний кот на самом деле был разведчиком из будущего?

Такие «что, если» и становятся семенами будущей игры. Иногда идея рождается у одного человека, иногда — в ходе совместного мозгового штурма. Её записывают в виде гейм-дизайн-документа (GDD — Game Design Document). Это не книга с готовыми инструкциями, а черновик мира, в котором пока нет ни кода, ни картинок — только описание:

  • Кто главный герой?
  • В чём суть игры? (Бегать и стрелять? Собирать предметы и решать загадки? Строить город и управлять им?)
  • Какие правила? (Можно ли умереть? Сколько жизней? Что даёт победу?)
  • Какой жанр? (Приключение, стратегия, гонки, симулятор, головоломка?)
  • Для кого игра? (Для малышей? Для подростков? Для всей семьи?)

На этом этапе ещё можно всё менять — даже жанр или главного героя. Цель — понять: стоит ли вообще делать эту игру? И если ответ «да» — переходим к следующему шагу.


2. Прототип: «Сделаем быстро и просто — чтобы проверить»

Прототип — это черновая, «картонная» версия игры, где всё настолько упрощено, насколько возможно.
Например:

  • Вместо красивого рыцаря — квадратик.
  • Вместо замка — несколько прямоугольников.
  • Вместо музыки — тишина или один писк при прыжке.
  • Вместо десятков уровней — один коридор с парой препятствий.

Зачем это нужно? Чтобы проверить главную механику — то, что делает игру интересной.
Представь: ты придумал игру, где герой может «прилипать» к стенам и ползать по ним, как паук. В прототипе ты просто делаешь квадратик, который при нажатии на пробел «приклеивается» к ближайшей стене и может по ней двигаться. Играешь пять минут — и понимаешь:

  • Это весело?
  • Это удобно?
  • Это утомительно?
  • Это вызывает «ах, вот как!» или «ну и что?»

Если прототип работает — команда решает продолжать. Если нет — либо меняет механику, либо ищет новую идею.
Прототип почти всегда создаётся программистами и гейм-дизайнерами, используя простые инструменты:
Scratch (для совсем юных),
Godot или Unity (для более продвинутых),
— иногда даже без кода — в Construct или GameMaker Studio.

Ключевой принцип: не трать время на красоту, пока не убедился, что идея «цепляет».


3. Команда: кто участвует в создании игры?

Большая игра — как корабль: на нём нужны капитан, штурман, механик, повар… и даже врач. Ниже — основные «роли» в игровой студии. (Для маленьких проектов один человек может выполнять сразу несколько ролей!)

РольЧто делаетЧем думает
Гейм-дизайнерПридумывает, как игра устроена: правила, уровни, награды, сложность.«Как сделать так, чтобы игроку было интересно и не скучно через 10 минут?»
Художник (2D/3D)Рисует персонажей, фоны, иконки, анимации. В 3D — моделирует объекты в программах вроде Blender.«Как должен выглядеть герой, чтобы ему сразу захотелось доверять?»
Программист (разработчик)Пишет код: заставляет героев двигаться, камеры следовать, монстров атаковать, сохранения работать.«Как сделать, чтобы прыжок чувствовался «весомым», а не как пружина?»
Звукорежиссёр / КомпозиторСоздаёт звуки (шаги, выстрелы, двери) и музыку.«Какой звук должен быть у магического щита? А у разбитого?»
СценаристПишет диалоги, описания предметов, историю мира.«Почему злодей стал злодеем? Может, у него была причина?»
Тестировщик (QA-инженер)Играет в игру целыми днями, находя ошибки: «Герой застрял в стене», «Кнопка не нажимается», «Если прыгнуть 7 раз подряд — игра зависает».«Как сломать игру? Не злобно — а чтобы её починили до выпуска».
Продюсер / Менеджер проектаСледит за сроками, бюджетом, координирует команду.«Успеем ли мы выпустить игру к Рождеству? Что можно упростить, если нет?»

⚠️ Важно: никто не «главнее» другого. Без хорошей идеи — даже лучшая графика не спасёт. Без кода — идея останется мечтой. Без тестировщиков — игроки увидят ошибки первыми. Команда — это единый организм.


4. Инструменты: с помощью чего делают игры?

У разработчиков есть «ящики с инструментами» — программы, которые помогают собирать игру, как конструктор.

Игровые движки

Это главный «фундамент». Движок — не игра и не программа вроде Word, а платформа, которая уже умеет:

  • рисовать картинки на экране (графика),
  • проигрывать звуки,
  • обрабатывать нажатия клавиш и сенсора,
  • физику (падение, столкновения, прыжки),
  • сохранять данные.

Самые известные движки:

ДвижокДля когоОсобенности
ScratchОт 8 лет и старшеБлоки вместо кода. Можно сделать игру за 20 минут. Отлично для первого опыта.
GodotОт 10–12 лет и вышеБесплатный, мощный, с языком GDScript (похож на Python). Подходит и для 2D, и для 3D.
UnityОт 12 лет и старшеОчень популярен, много уроков. Использует C#. Много игр для мобильных и ПК сделаны на нём.
Unreal EngineОт 14 лет и старшеМощнейшая графика («Фортнайт», «ГТА 5»). Использует Blueprints (визуальное программирование) и C++. Тяжеловат для слабых компьютеров.

🔧 Интересный факт: многие игры, которые ты знаешь, сделаны на одних и тех же движках. Например, Cuphead и Hollow Knight — обе на Unity, но выглядят совершенно по-разному. Это как если бы два повара готовили разные блюда на одной и той же плите.

Другие программы

  • Blender — для 3D-моделирования (бесплатно, профессиональный уровень),
  • Aseprite — для пиксель-арта (очень популярен в инди-играх),
  • Audacity — для записи и редактирования звука (бесплатно),
  • Trello или Notion — чтобы планировать задачи и не забыть, кто что должен сделать.

5. Этапы разработки: от «идеи» до «скачать»

Теперь соберём всё в единую цепочку. Это — жизненный цикл игры.

Альфа и бета — не «степени готовности», а типы тестирования.
Альфа — внутренняя: только команда и доверенные люди.
Бета — внешняя: иногда — открытая (любой может записаться), иногда — закрытая (по приглашению).

После релиза работа не заканчивается. Игроки находят новые ошибки, предлагают улучшения, просят новых персонажей. Поэтому выходят обновления (патчи), а иногда — дополнения (DLC — Downloadable Content), которые добавляют новые локации, сюжет или режимы.


6. А как делают мультиплеер?

Хороший вопрос! Одиночная игра — это «ты и компьютер». А в мультиплеере — «ты, друзья и сервер».

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

  • получает данные: «Игрок 1 нажал газ», «Игрок 2 повернул налево»,
  • проверяет: не столкнулись ли машины? не выехали ли за трассу?
  • отправляет всем обновлённую картину: «Машина 1 теперь здесь, машина 2 — здесь».

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

Задержка (лаг) возникает, когда сигнал от твоего устройства до сервера и обратно идёт слишком долго. Поэтому серверы стараются размещать как можно ближе к игрокам (например, в Европе — свой сервер, в Азии — свой).


7. Можно ли сделать игру самому?

Да — и это не мечта, а реальность.
Многие известные игры начинались как проекты одного человека:

  • Minecraft — Маркус Перссон (он же Notch) сделал первую версию почти в одиночку,
  • Stardew Valley — Эрик Бароне писал код, рисовал пиксели, писал музыку — 4 года в одиночку,
  • Undertale — Тоби Фокс: сценарий, дизайн, программирование, музыка.

Это требует терпения, но возможно. Особенно если начать с малого:

  • игра на одном экране,
  • 3–5 уровней,
  • один персонаж,
  • 2–3 звука.

Главное — довести до конца. Не идеально — а до состояния «можно показать другу». Потом — вторая игра будет лучше.


8. Задачи для понимания и практики

Ниже — три уровня заданий:
🟢 Начинающий (8–10 лет)
🟡 Уверенный (11–14 лет)
🔴 Продвинутый (14–16 лет и старше)


🟢 Начинающий

  1. Игра в воображении
    Придумай игру, в которой главный герой — твой школьный рюкзак.

    • Что он может делать? (Летать? Говорить? Прятать предметы?)
    • Какая у него цель? (Найти пропавшую тетрадь? Спасти пенал от злого мусорного ведра?)
    • Нарисуй эскиз главного экрана (даже просто на листке).
  2. Прототип без компьютера
    Возьми лист в клетку, карандаш и стираху.

    • Нарисуй сетку 10×10 клеток — это «уровень».
    • Поставь ⬛ на старте, 🟩 — на финише, 🔴 — на ловушках.
    • Придумай правила: сколько ходов за ход? Можно ли прыгать?
    • Сыграй сам — работает ли это? Скучно или весело?
  3. Найди «роли» в игре
    Включи любую игру (даже Snake или Tetris). Попробуй ответить:

    • Кто, по-твоему, придумал правила?
    • Кто нарисовал блоки/змейку?
    • Кто написал код, чтобы фигурки падали?
    • Какие звуки есть? Кто их мог сделать?

🟡 Уверенный

  1. Создай мини-GDD
    Опиши игру в 5 пунктах:

    • Название
    • Жанр (платформер? головоломка? кликер?)
    • Главный герой (кратко: кто, какие способности)
    • Основная механика (что игрок делает чаще всего?)
    • Цель (что нужно сделать, чтобы «выиграть»?)
  2. Прототип в Scratch
    Зайди на scratch.mit.edu, зарегистрируйся (можно без почты — через «гостя»).
    Сделай игру:

    • Герой — спрайт (например, кот).
    • Управление — стрелки.
    • Цель — собрать 5 монет (нарисуй их как круги).
    • При сборе — звук «пинг» и счёт +1.
      — Сохрани и дай ссылку другу.
  3. Анализ ошибок
    Найди в YouTube видео «game dev fails» или «funny game bugs».
    Посмотри 3 ошибки. Попробуй объяснить по-своему:

    • Почему это произошло? (Например: «Программист забыл проверить, не выходит ли герой за край карты»)
    • Как это можно было предотвратить?

🔴 Продвинутый

  1. Механика «переключения гравитации»
    Придумай игру, где игрок может менять направление «вниз»:

    • Нажал клавишу — «пол» стал потолком.
    • Герой теперь падает вверх.
      Опиши:
    • Как это повлияет на уровни?
    • Какие ловушки можно сделать?
    • Как проверить, что герой не застрянет в стене?
  2. Простой сетевой чат (без графики)
    Используя Python и модуль socket, напиши программу:

    • Один запускает как сервер (слушает порт 12345),
    • Другой — как клиент (подключается к localhost:12345),
    • Можно пересылать короткие сообщения туда-сюда.
      (Подсказка: используй потоки, чтобы не ждать ввода и приёма поочерёдно.)
  3. Реверс-инжиниринг упрощённо
    Возьми любую простую игру (например, Flappy Bird).
    Ответь на вопросы:

    • Сколько состояний у игры? (Меню, игра, проигрыш)
    • Какие переменные нужны? (score, bird_y, pipes[], is_alive)
    • Какие события обрабатываются? (Нажатие, столкновение, прохождение трубы)
      — Составь блок-схему логики.

9. Как устроена игра «изнутри»: логика, физика, кадры

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

Но в отличие от мультфильма, в игре каждый кадр зависит от тебя. Ты нажал кнопку — и следующий кадр уже другой. Эта связь «действие → реакция» и составляет суть игрового процесса.

Давай разберём, что происходит за кулисами — в игровом цикле.


Игровой цикл: сердце любой игры

Каждая игра, даже самая простая, работает по трём шагам — снова и снова, 60 раз в секунду:

[1. ВВОД] → [2. ОБНОВЛЕНИЕ] → [3. ОТРИСОВКА]
↑___________________________↓

Разберём по частям.

1. Ввод (Input)

Компьютер «слушает» тебя:

  • Ты нажал клавишу? → «Влево»
  • Повёл пальцем по экрану? → «Свайп вверх»
  • Нажал на джойстик? → «Наклон на 30°»

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

📌 Почему иногда «не реагирует»?
Если игра «тормозит» (например, из-за сложного расчёта), она может пропустить кадр — и ввод не обработается. Это не ошибка, а перегрузка.

2. Обновление (Update / Tick)

Здесь происходит вся логика. Компьютер отвечает на вопросы:

  • Двигается ли герой? → Да — прибавить 5 пикселей к X
  • Прыгает ли он? → Да — уменьшить Y, но прибавить гравитацию
  • Столкнулся ли с врагом? → Проверить расстояние между центрами
  • Прошёл ли уровень? → Все монеты собраны?

Этот этап — «мозг» игры. Именно здесь пишутся правила, проверяются условия, меняются переменные.

🧠 Переменные — это как «карточки», где хранится информация:
жизнь = 3, очки = 120, на_уровне = 5, может_прыгать = да
При каждом обновлении их значения могут меняться — и от этого зависит, что будет в следующем кадре.

3. Отрисовка (Render)

Когда всё посчитано — компьютер рисует картинку. Он берёт:

  • Фон (например, небо и горы),
  • Героя (в новых координатах),
  • Врагов, предметы, интерфейс (жизни, счёт),
    — и складывает их, как прозрачные слои в Photoshop.

Важно: отрисовка не влияет на логику. Ты можешь отключить весь экран — а герой всё равно будет падать, потому что расчёты идут в Update. Это часто используют при тестировании: «запустить игру без графики — чтобы проверить логику быстрее».


Физика в играх: почему герой не проваливается сквозь пол?

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

Простейшая модель прыжка:

Когда игрок нажимает «Пробел» И может_прыгать = да:
скорость_Y = -15 // вверх (минус — это вверх в экранной системе координат)
может_прыгать = нет

Каждый кадр:
скорость_Y = скорость_Y + 0.8 // гравитация «тянет вниз»
позиция_Y = позиция_Y + скорость_Y

Если герой касается земли:
может_прыгать = да
скорость_Y = 0

Обрати внимание:

  • Гравитация — не «сила», а постепенное изменение скорости.
  • Проверка касания земли — критична. Если пропустить хотя бы один кадр, герой может «провалиться» — потому что в промежуточном кадре он был уже внутри блока.

🔍 Почему в старых играх прыжки «резкие», а в новых — плавные?
В Super Mario (1985) гравитация прибавлялась раз в кадр — и движения были «пиксельными».
В Celeste (2018) используют интерполяцию: между кадрами рассчитывают промежуточные позиции — и движение сглаживается. Это требует больше вычислений, но выглядит естественнее.


Столкновения: как компьютер «видит» стены?

Это — одна из самых важных (и сложных) частей. Игра должна уметь отвечать на вопрос: «Соприкасаются ли эти два объекта?»

Самый простой способ — границы (bounding boxes).

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

  • У героя: X=50, Y=100, ширина=32, высота=32
  • У стены: X=80, Y=100, ширина=16, высота=16

Столкновение есть, если:

герой.X < стена.X + стена.ширина   И  
герой.X + герой.ширина > стена.X И
герой.Y < стена.Y + стена.высота И
герой.Y + герой.высота > стена.Y

Это — оси-выровненные прямоугольники (AABB). Быстро, просто, подходит для 90% 2D-игр.

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

  • круги (расстояние между центрами < радиус1 + радиус2),
  • полигоны (сложнее, но точнее),
  • пиксель-перфект — проверка на уровне отдельных пикселей (очень медленно, редко).

⚠️ Ошибка «прохождения сквозь стену» обычно возникает, когда объект движется очень быстро — и за один кадр пролетает весь блок, не коснувшись границ. Решение — проверять путь, а не только конечную позицию («лучевой бросок», raycast).


Анимация: как герой «ходит», а не просто скользит?

Если просто двигать квадратик — будет скучно. Чтобы персонаж «ожил», используют спрайт-листы — таблицы кадров.

[ Шаг 1 ] [ Шаг 2 ] [ Шаг 3 ] [ Шаг 4 ]
🦶 🦵 🦶 🦵

Каждые 0.1 секунды — следующий кадр. При этом:

  • Когда герой стоит — анимация «дышания» (лёгкое покачивание),
  • При беге — кадры быстрее,
  • При прыжке — отдельная анимация (подъём, вис в воздухе, приземление).

В 3D анимация сложнее: там используют скелеты — воображаемые кости внутри модели. Художник двигает «локти» и «колени», и программа рассчитывает, как изгибается «кожа» (меш).


Генерация миров: как делают бесконечные уровни?

В Minecraft, Terraria, No Man’s Sky миры огромны — но не хранятся целиком на диске. Они генерируются по формуле.

Основа — псевдослучайное число (PRNG). Это не «настоящий» случай, а число, которое кажется случайным, но всегда одинаковое для одного «семени» (seed).

Пример:

seed = 2025
rand(seed) = 0.73
rand(seed + 1) = 0.18
rand(seed + 2) = 0.91

Если ты введёшь seed = 2025, ты всегда получишь один и тот же остров — хоть вчера, хоть через 10 лет. Это позволяет:

  • Не хранить терабайты данных,
  • Делиться «координатами мира» (например, «зайди в мир с seed=1337 — там есть замок на облаке»),
  • Генерировать только то, что видно («чанки» вокруг игрока).

🌍 Интересный факт: В No Man’s Sky — 18 446 744 073 709 551 616 (2⁶⁴) уникальных планет. Все они — результат математических функций: шум Перлина (для гор), клеточные автоматы (для пещер), L-системы (для деревьев).


Звук и музыка: не просто «фон»

Звук в игре — не украшение, а обратная связь.

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

Современные игры используют адаптивный звук:

  • Громкость шагов зависит от поверхности (дерево — глухо, металл — звонко),
  • Музыка делится на слои: если враг приближается — включается «барабанная» дорожка,
  • Эхо меняется в зависимости от размера комнаты.

Для этого звукорежиссёры работают с Middleware — промежуточными системами, например, FMOD или Wwise. Там можно задать:

«Если игрок в воде → приглушить все звуки на 60 % и добавить эффект «бульканья»».


10. Практический блок: создаём игру по шагам (платформер в Godot)

Давай сделаем простой, но полноценный мини-платформер — и пройдём все этапы: от создания проекта до добавления звука.

💡 Почему Godot?
— Бесплатен, без подписок,
— Лёгок для старта, но мощен для роста,
— Использует GDScript — язык, похожий на Python (простой синтаксис),
— Поддерживает экспорт на Windows, Linux, macOS, HTML5, Android.

Шаг 1. Установка и первый проект

  1. Скачай Godot Engine с godotengine.org (выбери Stable, не Mono).
  2. Запусти → New Project → папка MyFirstGameCreate & Edit.
  3. В окне редактора: Scene → 2D Scene.

Ты видишь пустой экран — это сцена (Level 1).


Шаг 2. Фон и уровень

  1. В FileSystemNew Folder → назови art.
  2. Создай в art файл background.png (можно нарисовать в Paint: синий прямоугольник — небо).
  3. Перетащи его на сцену → в Inspector задай Layer = -1 (чтобы был позади всего).
  4. Добавь TileMap (поиск в Create New Node):
    • Создай новую TileSet,
    • Добавь спрайт земли (например, коричневый прямоугольник 32×32),
    • Нарисуй платформы, как в Mario.

Шаг 3. Герой

  1. Добавь CharacterBody2D — это базовый объект для персонажа с физикой.
  2. Внутри него — Sprite2D (загрузи героя — можно просто кружок) и CollisionShape2D (прямоугольник под размер героя).
  3. Прикрепи скрипт: Attach Script → язык GDScript.

Вот базовый код героя (пояснения в комментариях):

extends CharacterBody2D

const SPEED = 150.0
const JUMP_VELOCITY = -400.0
const GRAVITY = 1200.0

func _physics_process(delta):
# 1. Гравитация: если не на земле — падаем
if not is_on_floor():
velocity.y += GRAVITY * delta
else:
velocity.y = 0 # остановить падение

# 2. Управление
var direction = Input.get_axis("ui_left", "ui_right")
velocity.x = direction * SPEED

# 3. Прыжок
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y = JUMP_VELOCITY

# 4. Применить движение
move_and_slide()

Пояснение delta:
Это — время с прошлого кадра (обычно ~0.016 сек при 60 FPS). Умножая на delta, мы делаем движение независимым от частоты кадров: на слабом компьютере (30 FPS) герой идёт с той же скоростью, что и на мощном (120 FPS).


Шаг 4. Монеты и счёт

  1. Создай сцену Coin.tscn: Area2DSprite2D (жёлтый кружок) + CollisionShape2D (круг).
  2. Добавь в неё скрипт:
extends Area2D

@export var points = 10

func _ready():
body_entered.connect(_on_body_entered)

func _on_body_entered(body):
if body.name == "Player":
get_tree().call_group("ui", "add_points", points)
queue_free() # уничтожить монету
  1. В интерфейсе (CanvasLayerLabel) добавь скрипт:
extends Label

var score = 0

func _ready():
add_to_group("ui")

func add_points(value):
score += value
text = "Счёт: %s" % score

Теперь при касании монеты — счёт растёт, а монета исчезает.


Шаг 5. Звук

  1. Добавь AudioStreamPlayer2D в Player.
  2. Скачай бесплатный звук прыжка (например, с freesound.org), положи в art/sounds/jump.wav.
  3. В скрипте игрока, после velocity.y = JUMP_VELOCITY:
$AudioStreamPlayer2D.play()

Готово — теперь есть звук!


11. Задачи: углубление и эксперименты


🟢 Начинающий

  1. Меняй внешность
    В Godot (или Scratch) замени героя на что-то своё:

    • Пингвин? Робот? Картошка?
      — Меняй цвет фона. Сделай «ночной уровень» (тёмно-синий фон, жёлтые звёзды).
  2. Добавь врага
    Сделай врага, который просто ходит туда-сюда.
    — Если герой его коснётся — игра заканчивается (надпись «Game Over»).

  3. Звуковые метки
    Включи игру с закрытыми глазами. Попробуй угадать:

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

🟡 Уверенный

  1. Двойной прыжок
    Добавь возможность прыгать второй раз в воздухе (но только один раз).
    — Подсказка: введи переменную double_jump_used.

  2. Сейв-система
    При сборе 5 монет — сохраняй прогресс в файл.
    — При запуске — проверяй: есть ли сохранение? Если да — начинай с 5 монет.

    Используй ResourceSaver и ConfigFile.

  3. Процедурные платформы
    Напиши функцию generate_level(), которая создаёт 10 платформ в случайных позициях (но так, чтобы до них можно было допрыгнуть).
    — Запускай её при старте.


🔴 Продвинутый

  1. Сетевой мультиплеер (P2P)
    Используя ENetMultiplayerPeer, сделай игру, где два игрока управляют разными героями на одном уровне.
    — Один — хост (сервер), другой — клиент.
    — Передавай только позицию и направление (не всю сцену!).

  2. Система улучшений
    Добавь «магазин» после уровня:

    • За монеты можно купить:
      +5 к скорости, двойной прыжок, щит.
      — Сохраняй купленные улучшения между сессиями.
  3. Дизассемблирование логики
    Возьми Celeste (или Dead Cells) и, наблюдая за геймплеем, ответь:

    • Сколько состояний у героя? (idle, run, jump_start, jump_fall, dash, wall_slide…)
    • Как происходит «восстановление кадров» при смерти?
    • Почему прыжок чувствуется «отзывчивым»? (Подсказка: input buffering — приём нажатия за 5 кадров до приземления.)

12. Этические и социальные аспекты: игры — это не только развлечение

Игры влияют на нас — и важно понимать, как.

Что такое «аддиктивность» и как её избегают?

Некоторые игры используют приёмы, похожие на «петли вознаграждения»:

  • «Ещё 5 минут — и получишь приз!»
  • «Твой друг онлайн — присоединяйся!»
  • «Ты на 99 % к цели!»

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

✅ Хороший пример: Stardew Valley — можно выйти в любой момент, игра сохраняется автоматически перед сном.
❌ Плохой пример: «принудительные онлайн-сессии» в одиночной игре.

Микротранзакции и loot boxes

  • Микротранзакция — покупка внутри игры (скин, монеты).
  • Loot box — «коробка» с случайным предметом (как жвачка с сюрпризом).

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

📜 Правило разработчика:
«Если ребёнок 10 лет не может понять, за что он платит и с какой вероятностью получит предмет — система несправедлива».

Представление и инклюзивность

  • Может ли игрок выбрать пол,肤色, инвалидность персонажа?
  • Есть ли в игре персонажи с протезами, на коляске, со слуховыми аппаратами?
  • Не используются ли стереотипы («все злодеи — с акцентом», «женщины — только спасаемые»)?

Хорошие примеры:

  • The Last of Us Part II — персонаж с протезом руки,
  • Celeste — главная героиня борется с тревожностью,
  • Valiant Hearts — игра о Первой мировой без «героев» и «злодеев» — только люди.