vak: (Default)
[personal profile] vak
Игру "посадка на Луну" написал в 1969 году семнадцатилетний американский школьник Джим Сторер. Изначально он назвал её Rocket, но позже игра стала известна как Lunar Landing. Написана игра была на языке Focal для компьютера PDP-8. Позже широко разошёлся вариант, переписанный на Бейсик. На БЭСМ-6 эта игра имелась в составе игровой системы Джин. Не так давно [personal profile] spamsink смог восстановить исходный бэсмовский код (landing.pas).

Игра довольно трудная. Чаще всего вы получаете результат вида:
SORRY,BUT THERE WERE NO SURVIVORS-YOU BLEW IT!
IN FACT YOU BLASTED A NEW LUNAR CRATER 267.13 FT. DEEP
Чтобы результат считался приемлемым, остаточная скорость не должна превышать 22 мили в час: "CONGRATULATIONS ON A POOR LANDING". Пришлось припомнить бэсмовский опыт и потрудиться несколько дней, чтобы снизить скорость меньше 10 mph: "GOOD LANDING-(COULD BE BETTER)". Хитрость в том, что не нужно начинать тормозить прямо сразу, иначе вам не хватит топлива. Надо первые 70 секунд просто свободно падать. Со временем мне удалось достичь 4 mph. Но судя по исходникам, можно сесть ещё более мягко, ниже 1 mph.

Пришлось сварганить серьёзный оптимизатор, методом Монте-Карло подбирающий оптимальные величины расхода топлива на каждом шаге. Вот мой рекорд: 0.17 мили в час остаточной скорости прилунения. Будем запускать версию, переписанную с Фокала на Си. Скачаем с сайта самого Джима Сторера, ныне профессора университета Brandeis в Массачусетсе:
$ wget https://www.cs.brandeis.edu/~storer/LunarLander/LunarLanderTranslations/LunarLanderJohnsonTranslation-c.txt 
$ mv LunarLanderJohnsonTranslation-c.txt rocket.c
$ cc rocket.c -o rocket
$ ./rocket
CONTROL CALLING LUNAR MODULE. MANUAL CONTROL IS NECESSARY
YOU MAY RESET FUEL RATE K EACH 10 SECS TO 0 OR ANY VALUE
BETWEEN 8 & 200 LBS/SEC. YOU'VE 16000 LBS FUEL. ESTIMATED
FREE FALL IMPACT TIME-120 SECS. CAPSULE WEIGHT-32500 LBS


FIRST RADAR CHECK COMING UP


COMMENCE LANDING PROCEDURE
TIME,SECS ALTITUDE,MILES+FEET VELOCITY,MPH FUEL,LBS FUEL RATE
0 120 0 3600.00 16000.0 K=:0
10 109 5016 3636.00 16000.0 K=:0
20 99 4224 3672.00 16000.0 K=:0
30 89 2904 3708.00 16000.0 K=:0
40 79 1056 3744.00 16000.0 K=:0
50 68 3960 3780.00 16000.0 K=:0
60 58 1056 3816.00 16000.0 K=:0
70 47 2904 3852.00 16000.0 K=:200
80 37 1930 3476.43 14000.0 K=:200
90 28 1385 3072.94 12000.0 K=:189
100 20 1515 2664.30 10110.0 K=:189
110 13 2592 2222.89 8220.0 K=:177
120 7 4892 1777.47 6450.0 K=:183
130 3 3573 1274.99 4620.0 K=:198
140 0 5050 673.10 2640.0 K=:198
150 0 9 1.49 660.0 K=:10
ON THE MOON AT 157.20 SECS
IMPACT VELOCITY OF 0.17 M.P.H.
FUEL LEFT: 588.05 LBS
PERFECT LANDING !-(LUCKY)
Исходный текст программы на Фокале лежит здесь: LunarLanderListing.jpg

В игру можно играть онлайн на сайте: lunar69.uber.space/lunar.html

Date: 2023-07-13 21:50 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Для доказательства возможности посадки скорость на 120 миль должна быть не меньше 3600 mph. А она падает до этого значения уже на 100 милях. Увы-с.


TIME,SECS   ALTITUDE,MILES+FEET   VELOCITY,MPH   FUEL,LBS   FUEL RATE
      0               0      0         -22.00         0.0      K=:200
     10               1     70        -694.90      2000.0      K=:200
     20               3   4199       -1297.84      4000.0      K=:200
     30               8    897       -1843.40      6000.0      K=:200
     40              13   5236       -2341.03      8000.0      K=:200
     50              21    727       -2798.05     10000.0      K=:200
     60              29   2660       -3220.19     12000.0      K=:200
     70              38   5277       -3612.07     14000.0      K=:200
     80              49   2155       -3779.86     15000.0      K=:0
     90              59   4529       -3743.86     15000.0      K=:0
    100              70   1095       -3707.86     15000.0      K=:0
    110              80   2413       -3671.86     15000.0      K=:0
    120              90   3203       -3635.86     15000.0      K=:0
    130             100   3465       -3599.86     15000.0      K=:^C

Edited Date: 2023-07-13 21:50 (UTC)