От первых аркад и «Змейки» до инди-хитов: история ключевых механик 2D-игр

Коротко

История 2D-игр — это последовательное изобретение компактных математических правил, каждое из которых решало задачу удержания внимания игрока при минимальных ресурсах оборудования. Четыре фундаментальные механики — управление углом отскока от ракетки (Pong, 1972; Breakout, 1976), превращение собственного роста в преграду (Blockade, 1976; Snake, 1997), детерминированные конечные автоматы поведения врагов (Pac-Man, 1980) и исследование связного мира с проверкой ключей и способностей (Metroid, 1986; Castlevania: Symphony of the Night, 1997) — по-прежнему составляют каркас современных 2D-проектов. В статье разобрано устройство каждой из этих механик с точными датами и формулами, а угол отскока и цели привидений Pac-Man показаны в проверенном коде на JavaScript.

Содержание

  1. 1972–1976: управляемый угол отскока и рождение аркадной физики (Pong и Breakout)
  2. 1976–1997: феномен «Змейки» — как собственная длина становится главным врагом
  3. 1980: четыре правила привидений в Pac-Man и рождение игрового ИИ
  4. 1985–1997: от линейного скроллинга к связным мирам и замкам с ключами
  5. Сравнительная таблица: какую историческую механику выбрать для первых трёх проектов
  6. Практический сценарий: угол отскока и цели привидений в коде на JavaScript
  7. Когда вам это не подойдёт

1972–1976: управляемый угол отскока и рождение аркадной физики (Pong и Breakout)

Первая коммерчески успешная аркада Pong (Atari, инженер Аллан Алькорн, выпуск в ноябре 1972 года) доказала, что для азартного геймплея достаточно одной поправки к школьному закону «угол падения равен углу отражения»: угол отскока мяча должен зависеть от того, на каком расстоянии от центра ракетки произошёл удар. Если бы ракетка отражала мяч как плоская стена (vx_new = -vx, vy_new = vy), траектория замкнулась бы в бесконечный предсказуемый цикл, и игрок не мог бы прицельно направлять удар.

Аллан Алькорн разделил высоту ракетки на сегменты (источник: интервью Аллана Алькорна в архиве Computer History Museum, computerhistory.org, и книга С. Кента «The Ultimate History of Video Games», проверено: октябрь 2026). В современной 2D-реализации это правило записывается одной формулой через относительное смещение точки удара d в диапазоне [-1, +1] от центра ракетки высотой L:

d     = clamp((y_ball - y_paddle) / (L / 2), -1, 1)
theta = d * 60°
vx    = S * cos(theta)
vy    = S * sin(theta)

В мае 1976 года (13 мая в Северной Америке) Atari выпустила Breakout (концепция Нолана Бушнелла и Стива Бристоу, аппаратный прототип Стива Возняка и Стива Джобса), где второй игрок был заменён на стену из 8 рядов кирпичей: каждый выбитый кирпич давал очки и одновременно открывал коридор в тыл стены, ускоряя темп раунда.

1976–1997: феномен «Змейки» — как собственная длина становится главным врагом

Механика «Змейки» (Snake) впервые появилась в октябре 1976 года в аркадном автомате Blockade компании Gremlin Industries (инженер Лейн Хаук), а в 1997 году инженер Танели Арманто встроил игру Snake в мобильный телефон Nokia 6110 (источник: каталог аркадных автоматов The International Arcade Museum / KLOV, запись Blockade 1976 года, и официальная историческая справка Nokia / интервью Танели Арманто, проверено: октябрь 2026).

Инженерная красота «Змейки» состоит в самобалансирующейся петле риска и награды без единого внешнего врага:

  1. На старте поле из 20 × 15 = 300 клеток почти полностью свободно (длина змейки — 3 клетки, занято 1% поля), и начинающему игроку легко освоить кнопки поворота.
  2. Каждое собранное яблоко увеличивает счёт на +1 и добавляет 1 сегмент к хвосту. При длине в 75 клеток змейка занимает уже 25% игрового поля, превращая собственное тело в движущийся лабиринт.
  3. Движение всей змейки из N сегментов за один шаговый такт таймера (например, каждые 150 мс) не требует пересчёта всех N клеток: достаточно добавить одну новую клетку головы по вектору направления (dx, dy) и удалить последнюю клетку хвоста (если в этом такте не съедено яблоко).

Именно поэтому «Змейку» часто выбирают первой учебной игрой: она целиком собирается из таймера, сетки и проверки пересечения объектов.

1980: четыре правила привидений в Pac-Man и рождение игрового ИИ

Вышедшая в Японии 22 мая 1980 года аркада Pac-Man (Namco, геймдизайнер Тору Иватани) показала, как четыре врага на 8-битном процессоре Zilog Z80 с тактовой частотой 3,072 МГц могут действовать как слаженная команда охотников за счёт четырёх разных правил выбора целевой клетки (источник: GDC-доклад Тору Иватани 2011 года «Classic Game Postmortem: Pac-Man» и технический разбор The Pac-Man Dossier Джейми Питтмана, проверено: октябрь 2026):

  • Blinky (красный — «Тень»): выбирает в качестве цели текущую клетку игрока (x_p, y_p), создавая прямое давление сзади.
  • Pinky (розовый — «Быстрый»): целится на 4 клетки вперёд по направлению движения игрока, отрезая путь на перекрёстках.
  • Inky (голубой — «Застенчивый»): берёт точку на 2 клетки впереди игрока и удваивает вектор от позиции красного Blinky до этой точки, зажимая героя в клещи.
  • Clyde (оранжевый — «Глупыш»): когда расстояние до игрока больше 8 клеток по теореме Пифагора, преследует его как Blinky, а как только подходит ближе 8 клеток — сворачивает в свой левый нижний угол карты.

Кроме того, все четыре привидения синхронно переключаются по таймеру между тремя состояниями: «Разбегание по углам» (Scatter, 7 с), «Преследование» (Chase, 20 с) и «Испуг» (Frightened — синий цвет после съедания большой мигающей точки, когда охотник и жертва меняются ролями). Это классический конечный автомат (State Machine), который в любой современной 2D-игре реализуется одной переменной состояния врага.

1985–1997: от линейного скроллинга к связным мирам и замкам с ключами

После появления плавного горизонтального скроллинга и дизайна уровней «обучение без текста» в Super Mario Bros. (Nintendo, геймдизайнер Сигэру Миямото, 13 сентября 1985 года; в мире 1-1 первый гриб намеренно вылетает так, что в узком проходе игрок не может его перепрыгнуть и неизбежно узнаёт механику роста) 2D-игры освоили нелинейные карты. В Metroid (Nintendo, август 1986 года) и Castlevania: Symphony of the Night (Konami, март 1997 года, проверено: октябрь 2026) уровень перестал быть прямой полосой слева направо и превратился в граф комнат с условиями доступа.

На уровне логики движка «замок в метроидвании» — это обычное условие ЕСЛИ перед открытием двери или преодолением препятствия:

  • Узкий проход: проверка наличия предмета Ключ (булева переменная ЕстьКлюч == true или Ключи >= 1);
  • Высокий уступ в 192 пикселя (6 клеток): проверка открытой способности ДвойнойПрыжокРазблокирован == true.

Сравнительная таблица: какую историческую механику выбрать для первых трёх проектов

Таблица помогает преподавателям кружков, школьникам (с 10 лет) и начинающим авторам выбрать посильную механику по числу объектов и правил.

Лестница сложности базовых 2D-механик для учебных и инди-проектов
Этап обученияИсторический прототип (год)Ключевая механикаЧисло типов объектов на сценеЧисло правил «КОГДА → ЕСЛИ → СДЕЛАТЬ»Что тренирует автор
1-й проект (за 1 вечер)Blockade (1976) / сбор предметов на аренеДвижение по таймеру и сетке, сбор еды, счётчик очков3 (голова, хвост, еда)4–6 правилТаймер, сетка, перекрытие объектов
2-й проект (выходные)Pac-Man (1980)Лабиринт со стенами, патрулирование объекта враг, сбор ключа для открытия выхода5 (персонаж, стена, враг, ключ, выход)5–7 правилПатруль по отрезку, булевы переменные (КлючСобран), перезапуск уровня
3-й проект (1–2 недели)Super Mario Bros. (1985) / Metroid (1986)Многослойный платформер с гравитацией, Coyote Time, секретами и таймером7+ (с камерой, слоями и несколькими зонами)8–12 правилГравитация, Coyote Time, камера и параллакс, отладка

Практический сценарий: угол отскока и цели привидений в коде на JavaScript

Две исторические механики — угол отскока Pong и цели привидений Pac-Man — переносятся в современный код почти дословно: каждая занимает 5–15 строк на JavaScript. Код ниже проверен в Node.js 24; комментарии показывают его фактический вывод.

// 1. Угол отскока от ракетки (Pong): чем дальше от центра удар, тем круче угол
function bounce(ballY, paddleY, paddleH, speed) {
  const d = Math.max(-1, Math.min(1, (ballY - paddleY) / (paddleH / 2)));
  const theta = d * 60 * Math.PI / 180;            // до ±60°
  return { vx: speed * Math.cos(theta), vy: speed * Math.sin(theta) };
}
const hit = bounce(130, 100, 64, 400);              // удар у нижнего края ракетки
console.log(Math.round(hit.vx), Math.round(hit.vy)); // 222 333

// 2. Целевые клетки привидений Pac-Man в режиме преследования
// player: { x, y, dx, dy } — клетка игрока и направление взгляда
function ghostTargets(player, blinky, clyde, scatterCorner) {
  const ahead = function (n) { return { x: player.x + player.dx * n, y: player.y + player.dy * n }; };
  const pivot = ahead(2);
  const dist = Math.hypot(clyde.x - player.x, clyde.y - player.y);
  return {
    blinky: { x: player.x, y: player.y },                       // прямо на игрока
    pinky: ahead(4),                                            // на 4 клетки вперёд
    inky: { x: 2 * pivot.x - blinky.x, y: 2 * pivot.y - blinky.y }, // удвоенный вектор от Blinky
    clyde: dist > 8 ? { x: player.x, y: player.y } : scatterCorner, // ближе 8 клеток — в свой угол
  };
}
const t = ghostTargets({ x: 10, y: 20, dx: 1, dy: 0 }, { x: 4, y: 14 }, { x: 12, y: 22 }, { x: 0, y: 34 });
console.log(JSON.stringify(t));
// {"blinky":{"x":10,"y":20},"pinky":{"x":14,"y":20},"inky":{"x":20,"y":26},"clyde":{"x":0,"y":34}}

Для проверки взята клетка игрока (10, 20) со взглядом вправо: Pinky целится в (14, 20), Inky — в (20, 26), а Clyde, оказавшись ближе 8 клеток, уходит в свой угол (0, 34). Код упрощён: режимы «разбегание» (7 с) и «испуг» добавляются переменной состояния с таймером, как описано в разделе о Pac-Man.

Когда вам это не подойдёт

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

  • Сложные тактические и ролевые системы с сотнями таблиц характеристик: если в игре сотни видов экипировки, диалоговые деревья на десятки тысяч слов и поиск пути для 50 одновременных юнитов, простых аркадных правил (патруль по отрезку, таймер, счётчик) будет недостаточно.
  • Открытые пространства без сетки: правила привидений рассчитаны на клетки и перекрёстки лабиринта; в свободном 2D-пространстве врагам нужен другой способ выбора направления, например рулевое поведение (steering) или навигационная сетка.
  • Сюжетные игры без аркадного риска: визуальные новеллы и квесты строятся на диалогах и выборе, а не на углах отскока и таймерах, поэтому аркадные правила там избыточны.

Мы разрабатываем J2DRU — браузерный 2D игровой движок; он в разработке и публично пока не открыт, заявку можно оставить на странице раннего доступа (подача заявки не гарантирует приглашение).

Читайте также:

Частые вопросы

Когда появилась первая игра со змейкой, растущей при сборе предметов?

Механика растущего следа, столкновение с которым заканчивает раунд, впервые вышла в аркадном автомате Blockade компании Gremlin Industries в октябре 1976 года (разработчик — Лейн Хаук), а мировую популярность в карманном формате получила в 1997 году, когда инженер Танели Арманто запрограммировал Snake для телефона Nokia 6110.

Почему при обучении созданию 2D-игр начинают со «Змейки» или платформера со сбором монет?

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

Как в оригинальном Pac-Man 1980 года четверо привидений получили разный характер без сложных нейросетей?

Геймдизайнер Тору Иватани задал каждому привидению свою формулу целевой клетки в режиме преследования: красное привидение (Blinky) идёт прямо на клетку игрока, розовое (Pinky) целится на 4 клетки впереди по направлению взгляда игрока, голубое (Inky) строит вектор через позицию Blinky, а оранжевое (Clyde) преследует героя издалека, но уходит в угол, когда подходит ближе чем на 8 клеток.

Можно ли повторить правила привидений Pac-Man в своей игре?

Да. Каждое правило — это формула целевой клетки в 1–2 строки кода, а переключение режимов «разбегание», «преследование» и «испуг» хранится в одной переменной состояния. Для первого прототипа хватит Blinky и Clyde, а Pinky и Inky добавляют, когда лабиринт уже работает.