|
| |||
|
|
«Путь к Земле»: игры для настоящих мужчин.
' Лунолёт-1
' Публикация: ТМ-1985 N6,7
' Версия для ПМК (c) Михаил Пухов и Сергей Алексеев
' Лунолёт-I v1
' Публикация: LJR, 24 мая 2006
' Перевод на QBasic (c) Илья Васильев
' Распространяется под GPL v2 или старше
' На базе "Лунолёта-1" существует три электронно-фантастические игры:
' - Посадка на Луну (ТМ-1985 N6)
' - Посадка с постоянной горизонтальной скоростью (ТМ-1985 N7)
' - Угадай тяготение (ТМ-1985 N7)
CLS
PRINT " +++ Лунолёт-I +++"
PRINT
' Блок ввода исходных данных
FL = 0 ' Флаг, взлетаем или садимся.
G = 1.62: M = 2250: C = 3660: AM = 9.81 * 3
H = 0: U = 0: V = 1: MM = 400: X = 3600
DO
' Блок проверки: высота
IF H < -.001 THEN
T = 2 * H / (SQR(U * U + 2 * H * (G - A * AL)) - U)
GOTO X
END IF
' Оценки качества посадки взяты из "Лунолёта-Д"
IF ABS(H) <= .001 THEN
H = 0
IF FL THEN
FL = 0
SELECT CASE ABS(U)
CASE 0 TO 2.5
PRINT " *** Отлично! Мягкая посадка. ***"
CASE 2.5 TO 5
PRINT " *** Хорошо! Мягкая посадка. ***"
CASE 5 TO 7.5
PRINT " *** Посадка. ***"
' Затем наступает очередь серьёзных аварийных ситуаций
CASE 7.5 TO 10
PRINT " *** Кораблю требуется ремонт. ***"
CASE 10 TO 12.5
PRINT " *** У корабля вышел из строя двигатель. ***"
CASE IS > 12.5
PRINT " *** Смертельный исход. ***"
END
END SELECT
END IF
GOTO S
END IF
FL = 1
' Блок проверки: анализатор перегрузок из "Атмосферы-4"
SELECT CASE ABS(A)
CASE 25 TO 50
' Предупреждение
PRINT " *** ЕГГ0Г: Перегрузки! ***"
CASE 50 TO 75
' Серьёзная опасность, ремонтироваться на ходу
PRINT " *** 3ГГ0Г: Не дрова везёшь! ***"
CASE 75 TO 100
' Катастрофическая ситуация, операция завершилась трагедией
PRINT " *** Позвоните 03! ***"
CASE IS > 100
' Грубый анализатор
PRINT " *** От вас осталось мокрое место. ***"
END
END SELECT
' Блок проверки: "биологическая" из "Лунолёта-1"
IF ABS(A) >= AM THEN
DM = 0: T = ABS(A) - AM
PRINT " *** У вас потемнело в глазах! *** "
GOTO A
END IF
' Блок проверки: наличие топлива
' "С точностью до грамма, фирма гарантирует." (c) ТМ-1985 N10
IF MM >= .001 THEN GOTO S
MM = 0
PRINT " *** Топливо закончилось! *** "
' Пилотам остаётся лишь созерцать аварийный сигнал и ждать, пока они
' "куда-нибудь свалятся" (по меткому выражению Лунного Коршуна).
DM = 0: T = C
A:
' Аварийный сигнал
PRINT " ** Г **"
A$ = INPUT$(1)
GOTO G
S:
' Блок ввода-вывода
' На первом лунолёте стоял ограничитель времени манёвра: 0,7 секунд.
' На "одноруком бандите" (игра "Угадай тяготение") такого ограничителя
' не стояло.
' Ограничение математической модели:
' * расход топлива за манёвр не должен превышать 5% полной массы корабля,
' для кораблей класса "Кон-Тики" это составляет около 100 кг.
PRINT "Ресурс:"; X, "Топливо"; MM; "кг"
PRINT "Высота: "; H; "м", "Вертикальная скорость"; U; "м/с"
INPUT "расход, кг; время, с"; DM, T
AL = SGN(T) * SGN(DM): T = ABS(T): DM = ABS(DM)
G:
' Блок вычисления: вспомогательные переменные
Q = DM / T: A = Q * C / (M + MM)
X:
' Блок вычисления: основные переменные
X = X - V * T
TP = U + (A * AL - G) * T
H = H + (U + TP) * T / 2
U = TP
MM = MM - Q * T
' Блок проверки: перерасход топлива
IF MM < 0 THEN T = MM / Q: GOTO X
LOOP
Увлекателен и второй «Лунолёт». На нём можно отрабатывать не только вертикальные. Но и более сложные манёвры, задавая тягу под углом. Впрочем, прекрасное описание игры есть в ТМ-1985 №8. И там же начало «Пути к Земле», который теперь можно начать и в XXI веке. Воспользовавшись «Лунолётом-I», угадайте тяготение и попейте кофе с Лунным Коршуном. А потом повторите на обновлённом «Лунолёте-II» первые полёты наших отцов, опубликованные в ТМ-1986 №5.
' Лунолёт-2
' Публикация: ТМ-1985 N8
' Блок-схема: ТМ-1986 N5
' Версия для ПМК (c) Михаил Пухов и Сергей Алексеев
' Лунолёт-II v1
' Публикация: LJR, 24 мая 2006
' Перевод на QBasic (c) Илья Васильев
' Распространяется под GPL v2 или старше
CLS
PRINT " +++ Лунолёт-II +++"
PRINT
' Блок ввода исходных данных
PI# = 3.1415926#
FL = 0 ' Флаг, взлетаем или садимся.
G = 1.62: M = 2250: C = 3660: AM = 29.43
H = 0: U = 0: V = 0: MM = 1000: X = 250000
DO
' Блок проверки: высота
IF H < -.001 THEN
T = 2 * H / (SQR(U * U + 2 * H * (G - A * COS(AL))) - U)
GOTO X
END IF
' Оценки качества посадки взяты из "Лунолёта-Д"
IF ABS(H) <= .001 THEN
H = 0
IF FL THEN
FL = 0
SELECT CASE SQR(U * U + V * V)
CASE 0 TO 2.5
PRINT " *** Отлично! Мягкая посадка. ***"
CASE 2.5 TO 5
PRINT " *** Хорошо! Мягкая посадка. ***"
CASE 5 TO 7.5
PRINT " *** Жёсткая посадка. ***"
' Затем наступает очередь серьёзных аварийных ситуаций
CASE 7.5 TO 10
PRINT " *** Кораблю требуется ремонт. ***"
CASE 10 TO 12.5
PRINT " *** У корабля вышел из строя двигатель. ***"
CASE IS > 12.5
PRINT " *** Смертельный исход. ***"
END
END SELECT
END IF
GOTO S
END IF
FL = 1
' Блок проверки: анализатор перегрузок из "Атмосферы-4"
SELECT CASE ABS(A)
CASE 25 TO 50
' Предупреждение
PRINT " *** ЕГГ0Г: Перегрузки! ***"
CASE 50 TO 75
' Серьёзная опасность, ремонтироваться на ходу
PRINT " *** 3ГГ0Г: Не дрова везёшь! ***"
CASE 75 TO 100
' Катастрофическая ситуация, операция завершилась трагедией
PRINT " *** Позвоните 03! ***"
CASE IS > 100
' Грубый анализатор
PRINT " *** От вас осталось мокрое место. ***"
END
END SELECT
' Блок проверки: "биологическая" из "Лунолёта-2"
IF ABS(A) >= AM THEN
DM = 0: T = ABS(A) - AM
PRINT " *** У вас потемнело в глазах! *** "
GOTO A
END IF
' Блок проверки: наличие топлива
' "С точностью до грамма, фирма гарантирует." (c) ТМ-1985 N10
IF MM >= .001 THEN GOTO S
MM = 0
PRINT " *** Топливо закончилось! *** "
' Пилотам остаётся лишь созерцать аварийный сигнал и ждать, пока они
' "куда-нибудь свалятся" (по меткому выражению Лунного Коршуна).
DM = 0: T = C
A:
' Аварийный сигнал
PRINT " ** Г **"
A$ = INPUT$(1)
GOTO G
S:
' Блок ввода-вывода
' Ограничение математической модели:
' * расход топлива за манёвр не должен превышать 5% полной массы корабля,
' для кораблей класса "Кон-Тики" это составляет около 100 кг.
PRINT "Расстояние до цели:"; X, "Топливо"; MM
PRINT "Вертикальная скорость"; U, "Горизонтальная скорость"; V
PRINT "Высота: "; H
INPUT "расход, кг; время, с; угол, градусы"; DM, T, AL
AL = AL * PI# / 180
G:
' Блок вычисления: вспомогательные переменные
Q = DM / T: A = Q * C / (M + MM)
X:
' Блок вычисления: основные переменные
TP = V + A * T * SIN(AL)
X = X - (V + TP) * T / 2
V = TP
TP = U + (A * COS(AL) - G) * T
H = H + (U + TP) * T / 2
U = TP
MM = MM - Q * T
' Блок проверки: перерасход топлива
IF MM < 0 THEN T = MM / Q: GOTO X
LOOP
Если вы научились управлять космическим кораблём, вам по плечам сделать свой первый виток вокруг Луны на знаменитом «Лунолёте-III». Как это получилось у храброго экипажа «Кон-Тики», читайте в ТМ-1985 №9. Ответы к заданиям этого номера были опубликованы в ТМ-1986 №6. Многие участники знаменитого первого в истории космонавтики массового перелёта по маршруту Луна — Земля на электронных лунолётах системы «Кон-Тики» отметили в качестве лучшей игровой программы именно «Лунолёт-III».
' Лунолёт-3
' Публикация: ТМ-1985 N9, ТМ-1986 N6
' Версия для ПМК (c) Михаил Пухов и Сергей Волков
' Лунолёт-III v1o
' Публикация: LJR, 24 мая 2006
' Точный перевод на QBasic (c) Илья Васильев
' Распространяется под GPL v2 или старше
CLS
PRINT " +++ Лунолёт-III +++"
PRINT
' Блок ввода исходных данных
PI# = 3.1415926#
G = 1.62: M = 2250: C = 3660: R = 1738000: RR = R
V = 0: U = 0: F = 0: MM = 3500
K = G * R * R ' Гравитационная постоянная планеты
H = RR - R
DO
' Блок проверки: положительность высоты
IF H < 0 THEN
DO
' Полноценный посадочный блок из "Вершины":
' в "Лунолёте-3" использовался упрощённый посадочный блок T=-H/U
T = ABS(T) / 2 * SGN(H)
GOSUB P
LOOP WHILE H <> 0
END IF
' Рычаги управления
' Расход топлива при манёвре не должен превышать 5% от полной массы корабля
' (для лунолётов класса "Кон-Тики" это составляет 100-200 кг, в зависимости
' от наличного запаса топлива).
' Не рекомендуется также задавать время манёвра больше 100 с. Последнее
' ограничение снимается лишь в свободном полёте, после выхода на орбиту;
' но и в этом случае следует анализировать ситуацию хотя бы каждые 1000 с.
DO
PRINT "Расстояние до центра:"; RR; "м",
PRINT "Угловая координата:"; CSNG(F * 180 / PI#)
PRINT "Вертикальная скорость:"; U; "м/с",
PRINT "Горизонтальная скорость:"; V; "м/с", "Запас топлива:"; MM; "кг"
PRINT "Высота:"; H; "м", "Круговая скорость:"; VK; "м/с"
INPUT "угол, градусы; расход топлива, кг; время, с"; AL, DM, T
AL = AL * PI# / 180
' Блок проверки: перерасход топлива
LOOP WHILE DM > MM
' Блок вычисления: реактивное ускорение
MM = MM - DM
A = DM * C / ((M + MM) * T)
GOSUB P
LOOP 'Главный игровой цикл
P:
' "Припев"
' Определяет значения текущих переменных.
' Рассчётный блок, полностью совместимый с "Лунолётом-3".
' тяга, кориолисова сила
T1 = V + (A * SIN(AL) - U * V / RR) * T
F = F + (V + T1) * T / (2 * RR)
V = T1
IF COS(F) >= 0 THEN
' Корабль находится над видимой стороной луны
PRINT " *** E -0 ***"
ELSE
' Корабль находится над обратной стороной луны
PRINT " *** E 0- ***"
END IF
' тяга, тяготение, центробежная сила
T1 = U + (A * COS(AL) - K / (RR * RR) + V * V / RR) * T
RR = RR + (U + T1) * T / 2
U = T1
H = RR - R
VK = SQR(K / RR)
RETURN
Нам было сложнее: на экране видно только одно число. Зелёным по чёрному. Никаких поясняющих фраз, кроме скупых видеосообщений, казавшихся нам роскошью. Да и каждого результата приходилось ждать от ПМК долго, многие секунды. Мягкой посадки! |
|||||||||||||||