Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет arvi ([info]arvi)
@ 2006-05-24 01:40:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Музыка:Битва за Веснот.

«Путь к Земле»: игры для настоящих мужчин.
   Калькуляторы могут стать легендой. Но пока жив наш народ, игры, написанные нашими предками на заре компьютеризации, не утеряны. Инструкция и фантастический рассказ к первому из «Лунолётов» были опубликованы в ТМ-1985 №6, а две дополнительные игры в ТМ-1985 №7.

   Ниже опубликован «Лунолёт-I», переписанный мною с языка ПМК под более распространённый QBasic. Вы без труда сможете изменять под себя начальные данные, научиться сажать космический корабль и зависать в воздухе. Игру, конечно же, можно переписывать на более современные языки, под разные операционки. Обогатить графикой, звуком. Всё в наших руках.

   А пока... раскрывайте (или скачайте в формате DjVu) старинный журнал. Запускайте более молодой QBasic. И наслаждайтесь легендарными «Лунолётами». Это вам не пятые "Герои", привлекательные лишь из-за перенапряжения вашего же дорогостоящего оборудования и кошелька.

   Здесь на древнем экранчике только числа. "Путь к Земле" — это дело настоящих мужчин.

' Лунолёт-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


   Нам было сложнее: на экране видно только одно число. Зелёным по чёрному. Никаких поясняющих фраз, кроме скупых видеосообщений, казавшихся нам роскошью. Да и каждого результата приходилось ждать от ПМК долго, многие секунды.

   Мягкой посадки!