Источник изображения: arstechnica.com
Исследуя стратегию прохождения культовой игры 1969 года, инженер нашел в её коде многолетнюю ошибку.
В 1969 году, всего через несколько месяцев после исторической высадки астронавтов Нила Армстронга и Базза Олдрина на лунную поверхность, 17-летний американский школьник Джим Сторер создал примитивную текстовую компьютерную игру под названием «Лунный посадочный модуль» (Lunar Lander). Цель игры было смоделировать процесс посадки лунного модуля на поверхность Луны, требующий от игрока тщательного контроля расхода топлива для обеспечения плавного приземления.
Хотя визуально игра Сторера представляла собой лишь текстовые обновления статуса, выводимые на печатающее устройство, она заложила фундамент для будущих версий «Лунного посадочного модуля» с графическим интерфейсом. Сам Сторер реализовал свою игру на мини-компьютере PDP-8 на языке программирования FOCAL.
Спустя 40 лет, в 2009 году, обозреватель игр Ник Монфорт разыскал Сторера, взял у него интервью и подробно описал историю создания культовой игры в специальной статье. Позже Сторер опубликовал на своём сайте исходный код «Лунного посадочного модуля» на FOCAL как дань уважения к этой легендарной игре.
И вот, спустя ещё почти 15 лет, в 2024 году, на оригинальный код Сторера случайно наткнулся 70-летний пенсионер-программист Мартин К. Будучи экспертом в области искусственного интеллекта и разработки компьютерных игр, а также в прошлом научным сотрудником Массачусетского технологического института, Мартин решил поближе изучить код Сторера.
Его интересовала возможность применения так называемого «suicide burn» посадки лунного модуля, позволяющей максимально экономить топливо. Суть её заключается в том, что на начальном этапе модуль свободно падает к поверхности Луны, набирая скорость, а затем в последний момент включаются двигатели, резко замедляя падение для мягкой посадки. Мартин решил сравнить эффективность такого экстремального подхода с более плавным способом снижения, постепенно тормозя двигателями на протяжении всего полёта.
Однако при моделировании стратегии «suicide burn» Мартин столкнулся с несоответствием: игра Сторера неправильно фиксировала факт посадки лунного модуля на поверхность, хотя по всем расчётам та должна была происходить штатно. Заинтригованный этой аномалией, Мартин начал разбираться в исходных текстах программы Сторера и обнаружил, что физическая модель полёта в игре основана на весьма сложных для того времени концепциях, таких как уравнение Циолковского и ряд Тейлора.
Причина ошибки оказалась довольно простой. В одной из формул отсутствовало необходимое деление одного из параметров на два. Эта, казалось бы, незначительная оплошность привела к тому, что моделирование занижало время до достижения лунной поверхности и как следствие неправильно фиксировало момент посадки.
Источник изображения: arstechnica.com
Удивительно, но эта ошибка в коде Сторера оставалась незамеченной на протяжении почти 55 лет! За эти годы сотни тысяч геймеров наслаждались игрой «Лунный посадочный модуль» с её скрытым «изъяном». Этот курьёз наглядно демонстрирует, что реалистичность симуляции не всегда критически важна для создания увлекательного геймплея.
Сам же Мартин, описывающий подробности давней ошибки в своём блоге, остался восхищён математическими способностями 17-летнего Джима Сторера, сумевшего ещё в 1960-е годы реализовать в своей игре сложные вычисления на основе передовых на то время научных теорий. Как выяснил Мартин, отец Сторера был физиком и помог сыну с выводом уравнений для игрового симулятора полёта.