Нос корабля смотрит вверх, а сам он летит в сторону. Торпеда проходит мимо соперника, огибает звезду и возвращается с неожиданного направления. В этой Spacewar важно управлять движением, которое уже началось.
Игра выросла из ностальгии по DOS-версии 1985 года и интереса к её предшественнице для PDP‑1. Браузерная версия работает без эмуляции старого компьютера: полёт, бой и AI рассчитывает собственная программа. Играть можно против компьютера, вдвоём за одним экраном или по сети. От оригиналов здесь осталось главное удовольствие — дуэль двух кораблей в гравитационном поле.

Почему поворот не меняет траекторию
У корабля отдельно хранятся положение, скорость и направление носа. Поворот меняет только направление. Чтобы изменить скорость, нужно включить тягу; после отпускания кнопки корабль продолжает движение. Для торможения развернитесь против полёта и дайте короткий импульс. Если держать двигатель слишком долго, корабль остановится и начнёт разгоняться обратно.
Тяга добавляет 95 игровых единиц скорости за секунду, а поворот ограничен 1,4 радиана в секунду. Поле имеет логический размер 1280 × 720; увеличение картинки на мониторе не ускоряет физику. Расчёт идёт шагами по 1/120 секунды. Поэтому управление и столкновения не зависят напрямую от частоты отрисовки.
Зачем кораблю стартовая орбита
Корабли начинают полёт с поперечной скоростью относительно звезды. Притяжение постепенно поворачивает вектор движения, и вместо немедленного падения получается облёт. Для одиночной звезды вдали от поверхности ориентиром служит круговая скорость v ≈ √(G · M / r): более массивное тело требует большей скорости на той же дистанции.
На арене с несколькими телами нельзя обещать замкнутую круговую орбиту. Планеты и соседняя звезда меняют поле по мере движения корабля. Начальная скорость даёт время освоиться, но за дальнейшую траекторию отвечает игрок. Противоположные края экрана соединены, поэтому уход за край возвращает корабль с другой стороны.
Как звезда изгибает полёт
Каждое небесное тело вносит своё ускорение. В программе используется векторная формула a = G · M · r / (|r|² + ε²)^(3/2), где r направлен от корабля к телу, M — игровая масса тела, а ε смягчает рост ускорения рядом с центром. Ускорения всех тел складываются. Масса самого корабля сокращается при переходе от силы к ускорению.
Здесь G — коэффициент масштаба игры, а массы и расстояния условные. Ригель, Сириус и другие звёзды различаются игровыми параметрами, но игра не воспроизводит их астрономические размеры и массы в натуральном масштабе. «Чёрная дыра» сильнее искривляет траектории, а её горизонт событий поглощает корабли и торпеды. Фоновые созвездия служат ориентиром и притяжения не создают.
То же поле действует на торпеды. Снаряд получает скорость корабля и собственный импульс вперёд, поэтому прицеливаться приходится с упреждением. Его дальность ограничена всем пройденным путём: петля около звезды расходует запас дальности, даже если снаряд вернулся к месту выстрела. Переход через край поля этот запас тоже не восстанавливает.
Зачем два вида оружия и перекачка энергии
Торпеда сильнее одного попадания фазером, но летит до цели и может быть перехвачена. Фазер действует мгновенно на меньшей дистанции. Для каждого выстрела нужно новое нажатие — удержанием кнопки стену снарядов не построить. Точные расходы и перезарядки собраны в правилах боя.
Энергия нужна и для атаки, и для манёвра. Перекачка из защитного поля позволяет ещё раз выстрелить или уйти от звезды ценой уязвимости. Обратная перекачка помогает пережить удар, но оставляет меньше запаса на тягу. Невидимость и гиперпрыжок добавляют варианты отхода, сохраняя значение скорости и положения корабля.
Как два браузера видят один бой
В сетевой игре общий бой рассчитывает сервер. Браузеры отправляют команды управления, а сервер возвращает состояние кораблей, снарядов и счёта. Это даёт обоим игрокам одни правила столкновений и попаданий. Между обновлениями браузер сглаживает движение; движение своего корабля дополнительно предсказывает, чтобы управление ощущалось отзывчивее.
Для приглашения достаточно создать комнату и передать ссылку другу. После подтверждения готовности начинается дуэль. Короткий обрыв соединения приостанавливает бой и оставляет время на возвращение. Задержка сети всё равно влияет на ощущения: сглаживание помогает показать движение, но не отменяет время передачи команды.
На сервере ведётся технический журнал сетевых боёв: выстрелы, попадания, фактический урон, расходы энергии, длительность раундов и качество соединения. Он нужен, чтобы сравнивать оружие по реальным партиям. В записях нет имён игроков, IP-адресов, кодов приглашения и токенов подключения.
Попробовать самому
Начните с тренировки или боя против простого AI. Попробуйте отпустить тягу, развернуть нос и посмотреть, куда корабль продолжает двигаться. Затем выпустите торпеду рядом со звездой. Если хочется просто наблюдать за разными траекториями, включите «Демо»: компьютерные соперники будут менять арены после раундов.
Продолжение: правила, управление и DOS-оригинал · как появилась Spacewar! и каким был компьютер PDP‑1.