Коротко
История 2D-игр — это последовательное изобретение компактных математических правил, каждое из которых решало задачу удержания внимания игрока при минимальных ресурсах оборудования. Четыре фундаментальные механики — управление углом отскока от ракетки (Pong, 1972; Breakout, 1976), превращение собственного роста в преграду (Blockade, 1976; Snake, 1997), детерминированные конечные автоматы поведения врагов (Pac-Man, 1980) и исследование связного мира с проверкой ключей и способностей (Metroid, 1986; Castlevania: Symphony of the Night, 1997) — по-прежнему составляют каркас современных 2D-проектов. В статье разобрано устройство каждой из этих механик с точными датами и формулами, а угол отскока и цели привидений Pac-Man показаны в проверенном коде на JavaScript.
Содержание
- 1972–1976: управляемый угол отскока и рождение аркадной физики (Pong и Breakout)
- 1976–1997: феномен «Змейки» — как собственная длина становится главным врагом
- 1980: четыре правила привидений в Pac-Man и рождение игрового ИИ
- 1985–1997: от линейного скроллинга к связным мирам и замкам с ключами
- Сравнительная таблица: какую историческую механику выбрать для первых трёх проектов
- Практический сценарий: угол отскока и цели привидений в коде на JavaScript
- Когда вам это не подойдёт
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).
Инженерная красота «Змейки» состоит в самобалансирующейся петле риска и награды без единого внешнего врага:
- На старте поле из
20 × 15 = 300клеток почти полностью свободно (длина змейки —3клетки, занято1%поля), и начинающему игроку легко освоить кнопки поворота. - Каждое собранное яблоко увеличивает счёт на
+1и добавляет1сегмент к хвосту. При длине в75клеток змейка занимает уже25%игрового поля, превращая собственное тело в движущийся лабиринт. - Движение всей змейки из
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 лет) и начинающим авторам выбрать посильную механику по числу объектов и правил.
| Этап обучения | Исторический прототип (год) | Ключевая механика | Число типов объектов на сцене | Число правил «КОГДА → ЕСЛИ → СДЕЛАТЬ» | Что тренирует автор |
|---|---|---|---|---|---|
| 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 игровой движок; он в разработке и публично пока не открыт, заявку можно оставить на странице раннего доступа (подача заявки не гарантирует приглашение).
Читайте также: