| |||
![]()
|
![]() ![]() |
![]()
«Путь к Земле»: игры для настоящих мужчин. ' Лунолёт-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 Нам было сложнее: на экране видно только одно число. Зелёным по чёрному. Никаких поясняющих фраз, кроме скупых видеосообщений, казавшихся нам роскошью. Да и каждого результата приходилось ждать от ПМК долго, многие секунды. Мягкой посадки! |
|||||||||||||||
![]() |
![]() |