Гравилёт XXI |
Главная / ЭКВМ / Программы для ЭКВМ / Игры |
Автор программы: paul-161. Опубликовано: http://community.livejournal.com/mk_152/45235.html Всем доброго времени! Ну вот, кажется, и достигнут апогей космической программы на ЭКВМ. 12 января 2012 года состоялась первая межпланетная экспедиция к Меркурию на космическом корабле с гравитационным двигателем, впервые открытом в мае 1987 года Клубом электронных игр на страницах журнала "Техника - молодёжи". Краткий отчет об экспедиции и её итогах - ниже. А пока - описание корабля, на котором она состоялась.
I. Исследование окрестностей пульсара (нейтронной звезды)После описанного в "ТМ" первого случайного полёта Коршунов и Перепёлкин, разумеется, начали исследование "своей" системы, в которой, помимо нейтронной звезды, были обнаружены несколько вращающихся вокруг неё малых безатмосферных планет радиусом от 100 до 1000 км. Все орбиты планет находятся между границей опасного рентгеновского излучения пульсара (см. ниже) и орбитой базы (1 миллион километров от центра звезды). На каждой из планет находится какой-либо ценный металл - Медь, Титан, Серебро, Золото или Платина. На борту гравилёта исследователи обнаружили, кроме пульта управления, резервуаров с кислородом и бортового компьютера, хранилище для собранных образцов, которые специальный автоматический зонд пытается получить при приближении к поверхности планеты менее, чем на 1000 км (чем ближе, тем выше вероятность успешного сбора образца).
С версии 1.5 добавлен режим просмотра дополнительных параметров. Для включения в режиме "Планета" нажать клавишу "<->". На экране отображаются, помимо номера и названия/минерала планеты, следующие данные:
Вернуться в режим "Планета" можно повторным нажатием "<->". Цифровыми клавишами 0-9 можно выбрать планету, для которой индицируются параметры. База имеет номер 0. Для задания манёвра нужно нажать клавишу "В↑". На дисплее (в стеке) - обе скорости и параметры предыдущего манёвра (можно, не меняя ничего, просто нажать С/П для его повторения). Манёвр вводится так: коэффициент гравитации (по модулю не больше 10); В↑; время манёвра в секундах; C/П Время маневра автоматически ограничивается характерными временами (R/U и R/V). Также в режиме индикации можно клавишей "СX" повторить предыдущий заданный манёвр (любое число раз). Помимо иссякания ресурса (которое приводит к гибели пилотов от удушья и концу полёта), в системе есть следующие опасности для корабля: 1. При приближении к звезде менее чем на 100000 км появляется возрастающая опасность поражения корабля её рентгеновским излучением. В случае пробоя защиты экипаж корабля погибает и полёт заканчивается. 2. Через систему постоянно проходят рои метеоритов, подобные тому, что когда-то уничтожил "Лагранж". Корабль всегда имеет вероятность оказаться в таком рое. При полёте в рое бортовой компьютер сосредотачивает почти всю мощность на уклонении от метеоритов, поэтому выводимые данные ограничиваются пунктами 4-7, а режим "Планета" недоступен. Тем не менее, при длительном полёте внутри роя, есть некоторая вероятность поражения корабля, о чем выводится соответствующее сообщение. Точка поражения выбирается случайно: 1) Поражено хранилище образцов: теряются все найденные образцы, счёт (регистр D) обнуляется. 2) Поражены резервуары с кислородом: на случайную величину сокращается оставшийся ресурс полёта. 3) Поражен бортовой компьютер: на время ремонта выводится только оставшийся ресурс (пункт 7). 4) Поражен двигатель корабля: на время ремонта невозможно задание манёвра, корабль летит по последним заданным параметрам. 5) Поражена кабина пилотов. Разгерметизация. Экипаж погиб, полёт окончен. Ремонт производится автоматически, длительность его случайна (зависит от тяжести повреждения). При выходе из роя индикация всех параметров восстанавливается (если не поврежден бортовой компьютер). При старте программы система создаётся случайным образом (орбиты, углы, размеры планет, их ценные металлы). Астероид-база всегда имеет орбиту 1000000 км и радиус 1 км. Лунолёт стартует с его внешней стороны. Туда он и должен вернуться (игра заканчивается, в регистре X - счёт пилота). В случае касания базы со стороны звезды, столкновения с любой другой планетой или посадки на базу с суммарной скоростью больше 10 м/с корабль и его пилоты погибают. В начале ископаемые планет неизвестны пилоту (кроме базы, не содержащей их). При успешном запуске зонда (см. выше) к счету добавляется от 100 до 500 очков (в зависимости от найденного металла, который после этого в режиме индикации указывается для данной планеты). Ресурс полёта при старте даётся в зависимости от выбранного при старте числа планет (6 часов на каждую планету плюс 6 часов на возвращение). Миссия "Спасение"Выбирается ответом "1" на соответствующий вопрос на экране запуска, если выбрана локация "нейтронная звезда" (с v1.3). Второй гравилёт, спустя некоторое время найденный Коршуновым и Перепёлкиным на базе Пятой культуры, решили испытать прибывшие с Земли два их сменщика. Но в первом же полёте в корабль попал крупный метеорит, полностью уничтоживший двигатель и бортовой компьютер. Гравилёт оказался на орбите пульсара, его положение неизвестно. Шансов самостоятельно исправить аппаратуру у пилотов нет. На корабле быстро кончается кислород... Конечно, Коршунов и его бессменный штурман отправляются на втором гравилёте на поиски товарищей. К счастью, на аварийном корабле уцелел радиомаяк, подающий сигналы, по которым гравилет спасателей может узнать пеленг (PLNG) и дистанцию до цели (RANG). Задача пилота - угадывая орбиту и угловое отклонение цели, подойти к аварийному кораблю на дистанцию менее 1000 км, чтобы с корабля-спасателя мог быть запущен автоматический зонд, заранее переоборудованный в ремонтного робота. За успех этой миссии (при удачном возвращении на базу) пилот получает 1000 очков. Эти очки сохраняются даже в случае попадания метеорита в хранилище корабля. Параметры аварийного корабля можно узнать, нажав в режиме индикации клавишу "1". Остальные клавиши, как обычно, вызывают данные по планетам (можно, выручив второй экипаж, сразу лететь собирать образцы минералов). Пеленг отсчитывается от оси гравилет-спасатель - звезда. Нулю градусов соответствует положение аварийного корабля точно между гравилетом и звездой. Ресурс аварийного корабля, после исчерпания которого миссия считается проваленной, составляет случайную величину от 6 до 12 часов. При провале миссии счет обнуляется и очки за исследование планет даваться уже не будут. Желаю успеха спасательной экспедиции! II. Солнечная системаПосле возвращения Коршунова и Перепёлкина из экспедиции с поразительным "трофеем" в виде гравилёта Пятой культуры, учёные Земли смогли на его базе построить новый корабль - большего размера, с увеличенным ресурсом жизнеобеспечения и более мощным двигателем. На этом корабле (назовите его по своему вкусу) нам и предстоит исследовать окрестности родного светила. Принципы работы программы - те же, что и ранее. Главное отличие - система не создаётся случайно, а являет собой модель Солнечной системы (пока без пояса астероидов, комет и спутников планет). Земля имеет номер 0. Остальные восемь планет получают случайные углы отклонения от оси Солнце-Земля, реальные радиусы орбит и размеры. Притяжение планет на корабль не действует - двигатель Пятой культуры управляется "лучом" гравитации, направленным к Солнцу. Корабль стартует из точки на орбите Земли высотой 1000 км (у причала орбитальной станции "Мир-XXI"), точно "позади" планеты. Ресурс полёта - примерно месяц (700 часов). Сбором ископаемых заниматься нам не придётся, задача - пройти как можно ближе к выбранной для себя планете и вернуться на Землю (обязательно с "внешней" стороны - там будет находиться наша орбитальная станция, и скоростью не более 10 м/с). С версии 1.5 если корабль находится между 330 и 540 миллионами километров от Солнца, он:
При поврежденном компьютере и/или двигателе очки за астероиды не начисляются. Режим "Задание"(версия 1.5) После выбора локации "Солнечная система" и отказа от поединка с Немезидой (см. ниже), нужно выбрать один из ответов на вопрос, заданный программой:
После ответов с "1" по "4" в режиме индикации планета, являющаяся целью полёта, помечается звездочкой перед её названием. Очки даются только за исследование этой планеты (т.е. полёт максимальной длительности на как можно меньшей высоте над ней), плюс очки за найденные астероиды. При выборе пунктов 1-4 по сравнению со свободным полётом полученные за исследование планет очки удваиваются. Полёт к Солнцу(версия 1.5) Для изучения солнечной активности и разработки новых источников энергии гравилёт должен доставить как можно ближе к Солнцу автоматическую научную станцию "Фаэтон", закрытую особым отражающим щитом, который позволит станции существовать в пылающей короне светила. Собственного двигателя "Фаэтон" не имеет. Гравилёт, мощность двигателя которого намного меньше обычной из-за необходимости плотной тепловой защиты, толкает щит "Фаэтона" перед собой, двигаясь к Солнцу. В это время он полностью защищен как от излучения Солнца, так и от попаданий метеоритов. Если DSTR сократится до 1 млн.км, то щит не выдерживает потока раскаленной плазмы - пилот, корабль и станция немедленно погибают. На как можно более близком расстоянии (параметр DSTR) нужно произвести расстыковку с остающимся на орбите светила "Фаэтоном" - ввести отрицательный коэффициэнт гравитации. В этот момент пилоту начисляются очки - тем больше, чем ближе к Солнцу произошла расстыковка (максимальное расстояние для получения очков - 25 млн.км). После расстыковки гравилёт уже не закрыт от Солнца щитом "Фаэтона" и должен как можно быстрее покинуть зону опасного теплового излучения (пролегающую примерно до половины орбиты Меркурия), а затем вернуться на Землю. Миссия "Немезида"(версия 1.5) Прошло десять лет со дня первого нечаянного полёта Коршунова и Перепёлкина на маленьком гравилёте у нейтронной звезды. Опытный корабль, построенный на Земле, исследовал одну за другой планеты, их спутники, пояс астероидов, окрестности Солнца... Он стал близок десяткам стажёров, изучающим непростую науку космического вождения. И их наставникам - опытным пилотам, проверяющим поведение корабля в экстремальных режимах. Опыты с гравитационными двигателями продолжались. Земля готовила новые корабли и новые экспедиции - теперь уже к далеким звездам. И вдруг... Космические телескопы, неспешно летящие по земной орбите, обнаружили далеко за орбитой Нептуна, в пяти миллиардах километров от Солнца, необычайно быстро двигающийся объект. Сфероид диаметром около 200 километров приближался с огромной, почти невозможной для небесных тел скоростью. Гравитация Солнца и планет-гигантов совершенно не действовала на объект, и это невольно наводило на мысли о том, что его создателями являлись те же существа Пятой культуры, которым Земля была обязана своим первым гравилётом. Простые расчеты показали то, от чего замерли на миг сердца всех тех, кто знал о происходящем. Потому что не позже чем через месяц прямая, как стрела, траектория объекта, очень скоро негласно прозванного малой планетой Немезида, обязательно должна была пересечься с орбитой Земли точно в месте нахождения единственного пока дома человечества. А значит - не оставить в нём ничего живого. Ни один обычный корабль не способен был догнать в глубинах космоса Немезиду, каждую секунду оставлявшую позади тысячи километров на своём роковом пути. Ничто на Земле не способно было заставить её свернуть в сторону. Единственной надеждой миллиардов людей оставался маленький корабль-гравилёт на орбите и его пилот по имени Александр Коршунов. "Звёздный Коршун". Который в этот раз уже не имел права на ошибку... *** Миссия "Немезида", в которой пилоту гравилёта нужно совершить не более и не менее чем спасение Земли, выбирается ответом "1" на соответствующий вопрос после начального выбора локации "Солнечная система". При индикации параметры Немезиды просматриваются клавишей "9". В режиме "Планета" радиальная скорость VRAD выводится относительно радиальной скорости Немезиды (составляющей постоянную случайную величину от 2 до 4 тыс.км/с). Вместо радиуса RPLN выводится параметр DNEM - расстояние от Немезиды до орбиты Земли. Все переключения режимов и управление осуществляются, как обычно. Если Немезида достигнет Земли - игра окончена (как и жизнь на планете). Задача пилота - подойти к Немезиде на расстояние менее 1000 км и запустить к ней планетный зонд, несущий мощный термоядерный заряд. Для успешного запуска зонда гравилёт должен лететь параллельно Немезиде (т.е. его радиальная скорость должна быть отрицательной). Запуск зонда невозможен в метеоритном рое или в поясе астероидов. В случае успеха миссии пилот получает 3000 "несгораемых" очков, и Немезида исчезает из Солнечной системы. После этого нужно, как обычно, вернуться на Землю и быть встреченным как герой всей планеты. Удачи в спасении Земли! И мягкой посадки, разумеется. Первая экспедицияКорабль "Ра", управяемый пилотом-стажёром, успешно стартовал с земной орбиты. Анализ положения планет показал, что оптимальной целью путешествия станет Меркурий, который менее чем на 2 градуса отставал от оси Солнце-Земля. Таким образом, кораблю осталось преодолеть всего около 92 миллионов километров. Стажёр, еще недавно пилотировавший учебные лунолёты, был полон радостного оптимизма. Положение шарика на пульте двигателя - 10. Разгон почти до 2 тысяч километров в секунду. Быстро оставшаяся далеко позади Земля и точка Луны на её фоне. Полёт к растущему на экранах приборов Солнцу. Спустя примерно сутки, когда до Меркурия оставалось менее 20 миллионов километров, пилот понял, что сильно обгоняет свою цель и пройдёт далеко впереди планеты. А за ней огромная сила солнечных лучей уже угрожала даже более чем серьезной защите корабля. Пилот передвинул шарик пульта на отметку "-10", и траектория корабля стала описывать огромную вытянутую петлю, удалясь от Меркурия ("в космосе нет прямых путей к цели" - вспомнилась пилоту фраза из учебника). После выхода из петли (достигшей длины порядка 30 миллионов километров) корабль устремился уже прямо к Меркурию, догоняя его уже с гораздо меньшей скоростью. Серый диск, выжженный чудовищным жаром близкого светила, рос на глазах. Пилот заворожённо смотрел на это зрелище, забыв про шарик пульта, на котором лежала его рука. Взглянув на приборы, порадовался своему успеху - в первом же полёте одной корректирующей петлей добиться такой точности! А с возвращением проблем не будет, он был в этом уверен. Кончались вторые сутки полёта. До планеты оставалось всего 10 тысяч километров - чуть больше её диаметра. Меркурий заполнил уже весь экран переднего обзора. Видна была огненная линия терминатора. И вдруг... Пилот, наслаждавшийся видом столь близкой цели, вдруг осознал, что скорость корабля по-прежнему составляет не менее 200 километров в секунду! Его рука толкнула шарик еще до того, как мозг проанализировал этот ужасающий факт. Скорость пошла вниз... но гораздо медленнее, чем исчезали тысячи километров между стажёром с широко распахнутыми глазами и пепельной поверхностью планеты. Через несколько часов после того, как корабль со скоростью более ста километров в секунду врезался в кратеры теневой стороны Меркурия, Солнце залило своим пламенем его немногочисленные останки, теперь лишившиеся активной защиты, и превратило в пепел большую их часть. А на орбите Земли уже строился второй гравилёт. И его будущие пилоты (которые, как все верили, не повторят ошибок первопроходца) читали надпись на воротах дока станции "Мир-XXI". Надпись, взятую из книги одного древнего писателя, которого почему-то помнили и сейчас, забыв множество других. Кораблю - взлёт! Хроники гравилётчиков(в качестве послесловия) 10.01.2012 - первый корабль с гравитационным двигателем сходит со стапеля. 12.01.2012 - неудачная экспедиция к Меркурию. Падение на большой скорости на теневую сторону планеты. Катастрофа корабля, гибель пилота. 20.01.2012 - гибель корабля-разведчика, посланного к Юпитеру. Слишком большая скорость, набранная в окрестностях Солнца, не даёт возможности вовремя затормозить в слабом гравитационном поле, и неуправляемый корабль уходит за пределы Солнечной системы. 25.01.2012 - первый успешный полёт к поясу астероидов (166 очков). 28.01.2012 - катастрофа марсианской экспедиции. Корабль получает попадание метеорита, разрушившее двигатель, входит в зону сильного солнечного излучения и там сгорает. 30.01.2012 - успех первой экспедиции к Венере. Корабль проходит в 210 км от дневной стороны Вечерней Звезды и возвращается на Землю через 16 суток после старта. Время нахождения в верхних слоях атмосферы - около 15 минут. 880 очков. 31.01.2012 - неудачная экспедиция к Сатурну. Из-за навигационных ошибок и сложной метеоритной обстановки корабль проходит в 7,5 млн. км от Сатурна и благополучно возвращается на Землю, не рискуя второй попыткой (остаток кислорода при приземлении - не более двух суток). Версия 2.0. Первая Звёздная экспедиция.1. Температура и радиацияВведен параметр температуры корабля, одновременно показывающий его радиационный уровень (если корабль находится в окрестностях звезды/Солнца/пульсара). В открытом космосе T=-273 градуса. При приближении к звезде или входе в атмосферу планеты температура начинает расти. На корпусе корабля она может достигать 1000 градусов. От этой температуры зависит температура внутри корабля, которая при превышении значения 25 градусов автоматически показывается при индикации на месте параметра "Ресурс" в режиме "Система". Если внутренняя температура достигает 50 градусов (это соответствует 1000 градусов на корпусе) - корабль погибает (или от проникающей радиации гибнет его экипаж). Скорость роста температуры зависит от случайной величины солнечной активности (или плотности атмосферы) и состояния тепловой/радиационной защиты корабля (см. ниже). При удалении за пределы атмосферы или излучения звезды температура постепенно снижается вплоть до -273 градусов. 2. Новая система повреждений от метеоритовПри попадании возможны следующие варианты: - попадание в резервуар кислорода и компьютер: действуют как и раньше; - попадание в двигатель: теряется случайная часть мощности двигателя; - попадание в регулятор гравитации: двигатель заклинивается и время от времени (частота зависит от расстояния до источника гравитации - т.е. звезды) случайно меняет значение коэффициента до окончания ремонта; - попадание в термозащиту: корабль сильнее нагревается/получает бОльшую дозу радиации в атмосферах планет и в окрестностях звезды. 3. Карьера пилотаСохранение в файл теперь делается не только по команде клавишей "Ввод", но и автоматически при завершении полёта (удачном или неудачном). Файл загружается не из меню, а автоматически при старте программы. Гибель пилота обнуляет счёт в файле. Таким образом, программа отслеживает все удачи и неудачи пилота - владельца ЭКВМ. При этом счет на экране дополнительных параметров - это общий счет пилота. Новая клавиша управления в режиме индикации. "Выход" - самоубийство пилота с обнулением его счета (нужно при невозможности нормально завершить полёт - например, корабль набрал слишком большую скорость и потерял возможность её снизить). 4. Пилотский блокнотПилотский блокнот убран из программы. К звёздам!Цель: посещение системы звезды, близкой по типу к Солнцу (масса от 0,5 до 2 солнечной, расстояние от Земли от 5 до 10 световых лет). В системе имеется от 3 до 9 планет, при этом каждая похожа на одну из планет Солнечной системы (от Меркурия до Нептуна). Близлежащие к звезде планеты "земной" группы могут иметь условия для органической жизни, т.е. жидкую воду и высокий процент кислорода в атмосфере. Такая планета, если она будет найдена и исследована, получит название "НОВЫЙ ЭДЕМ". План экспедиции: 1) РазгонДля полёта к звезде нужно набрать скорость не менее 100000 км/с и удалиться за орбиту Нептуна - на расстояние 5 млрд. км от Солнца. Программа автоматически переходит в режим межзвездного полёта. При поврежденном двигателе порог скорости уменьшается пропорционально степени повреждений. Рекомендация: разгон выполнять из окрестностей Солнца, задавая положение регулятора "-10" и время манёвра не более 30 с (до орбиты Венеры), не более 60 с (до орбиты Марса) и любое после пояса астероидов. 2) ПолётНа экране индицируются: скорость корабля, время полёта и оценка полного пути до звезды в месяцах, интегральный показатель надежности бортовых систем и оставшийся запас энергии на корабле (изначально рассчитанный на полёт к звезде и обратно на скорости, равной половине световой, плюс 50 суток на маневры у звезды). Управление в режиме межзвёздного полёта: "8" - в следующем месяце увеличить скорость на 1% "2" - в следующем месяце уменьшить скорость на 1% "5" - в следующем месяце не менять скорость "Ввод" - сохраниться в файл Если скорость корабля выше половины световой (150000 км/с), надежность его систем постепенно снижается - при этом растет вероятность катастрофы и гибели корабля. При скорости ниже половины световой надежность восстанавливается вплоть до 100%. Скорость снижения и восстановления надежности определяется величиной отклонения скорости от значения 150000 км/с. 3) Исследование системы звездыПри удачном окончании полёта к звезде программа снова возвращается в стандартный режим. Параметры звезды можно просмотреть клавишей "0". Данные по планетам (начиная с "1") смотрятся как обычно. В режиме "Система" теперь показывается не параметр DORB, а параметр RORB - радиус орбиты планеты (это, кстати, верно и для системы пульсара, и для Солнечной системы). Сразу после прибытия в систему нужно провести торможение (регулятор гравитации на "-10"). Чтобы уменьшить вероятность сгореть у звезды, желательно снизить скорость еще в конце межзвёздного перелёта (следя за запасом энергии на обратный путь). Изначально типы планет (верхняя строка) неизвестны. При приближении к планете есть шанс "открыть" её (т.е. определить, на какую планету Солнечной системы она похожа). За это даётся 250 очков. Чем меньше параметр DPLN - тем выше шанс "открытия" (при удаче режим индикации автоматически переключается на вновь открытую планету). При поврежденном компьютере планеты не открываются. 4) Открытие Нового ЭдемаПри обнаружении в системе звезды планеты типа "Земля" надо сблизиться с ней и войти в атмосферу (высота атмосферы задаётся случайным образом). За успех этой миссии пилот получает 1000 очков. На экране - картина Земли (нужно нажать СХ). Корабль выпускает "челнок", доставляющий на поверхность планеты первых колонистов. И сразу вслед за этим покидает атмосферу, готовясь к возвращению на Землю (или к исследованию остальных планет). 5) ВозвращениеДля старта обратно к Солнцу надо снова набрать радиальную скорость 100000 км/с (с возможной поправкой на поврежденный двигатель) и удалиться от звезды на расстояние, определяемое её размерами (от ~1,5 до 6 млрд. км). Режим обратного полёта выглядит точно так же, как описанный в п.2. При падении запаса энергии до 0 раньше конца пути корабль погибает. В Солнечной системе нужно, как обычно, сбросить полную скорость до 100 м/с и войти в атмосферу Земли для победного возвращения домой Первой Звёздной экспедиции. Некоторые итоги.
Больше хороших идей у меня нет. Реализовал всё, что хотел с давних времён, получилось, как мне кажется, неплохо. Из физической модели "Гравилёта" вряд ли можно выжать что-то еще (вариант с планетами вместо звезд и спутниками в роли планет я отбросил как мало отличающийся по сути от того, что уже есть). Дальше - правка теоретически возможных ошибок и, главное - простор для фантазии пользователей. Мягкой посадки! Версии1.1
1.2
1.3
1.4
1.5
2.0
2.1 Всего одно изменение. Вместо Эриды (слишком уж далёкой и сложной) теперь у нас куда более интересная Церера, крупнейший объект пояса астероидов. "Ледяные карлики" в меню выбора задания переименованы, соответственно, в "малые планеты". Коэффициент умножения очков у Цереры 3,5 - средний между 3 у Марса и 4 у Юпитера. Радиус и удаление от Солнца также взяты средними (487 км и 2,77 а.е.). Радар (первые 4 параметра) работает в нормальном режиме в поясе астероидов, если клавишей "9" выбрана Церера. Будьте осторожнее при подходе к Церере, помните об астероидах! И как обычно - мягкой посадки! 2.2 Последние штрихи картины. Некоторые исправления и улучшения.
Программа "Гравилёт XXI"Версия 2.2 (5378 байт, КС 483646/62)
Исходный текст для кросс-компилятораФайл Gravilet22.mkl ; Гравилет-XXI ; Версия 2.2, 01.05.2012 ; Регистры: ; 0,4,5,A,B - как в старом Гравилете ; 1,2,7,8 - рабочие ; 3 - число планет (-1, если начинается новый полет) ; 6 - косвенный адрес ; 9 - время маневра ; C - текущая планета ; D - константа 9021 ; E - константа 9000 ; 15 - предыдущий коэф-т гравитации ; 16 - временная трансверс. скорость ; 17 - признак окрестностей планеты ; 18 - радиус излучения звезды ; 19 - адрес начала названий планет ; 20+5*n - радиус орбиты n-астероида,угол n-астероида, ; радиус n-астероида,расстояние до него,минерал на нем ; (0-астероид - база/Земля) ; 70 - состояние корабля (-2,-1,1,2) ; 71 - признак попадания в рой (-1,0,1) ; 72 - мощность двигателя (0 для звезды, ; 5 для Солнечной системы, 3 для полета к Солнцу) ; 73 - время полета ; 74 - надежность метеоритной защиты ; (0,99 для пульсара, 0,999 для Солнечной системы) ; 75 - признак спасательной миссии ; 76 - ресурс аварийного корабля ; 77 - пеленг аварийного корабля ; 78 - номер планеты-задания (-1 для полета к Солнцу) ; 79 - угловой путь гравилета ; 80-89 - высоты атмосфер планет 0-9 ; 90 - признак звездной экспедиции ; 91 - константа 9023 ; 92 - скорость Немезиды ; 93 - осталось времени (ресурс) ; 94 - счёт игры ; 95 - расстояние от Солнца до Немезиды ; 96 - угол между кораблем и Немезидой ; 97 - радиус Немезиды/параметр звезды ; 98 - расстояние до Немезиды/звезды ; 99 - температура корабля CX P M 94 PP M 9045 ; Загрузка из файла P GSB FIND_FILE 1 - P X!=0 START 1 + PP M 9128 PP M 9123 PP M 9128 PP M 9124 ; Узнаем, где сохранили файл RM 3 P X>=0 START P X=0 PRINT P RM 90 P X=0 INTERSTELLAR1 P GOTO INTERSTELLAR2 ; Начинаем заново START: CX M B P M 15 P M 17 P M 21 P M 23 P M 24 P M 71 P M 73 P M 75 P M 77 P M 78 P M 79 P M 90 P M 92 P M 95 P M 97 .NUM PLAN0 P M 19 60 M 9 5 P M 72 0,999 P M 74 1 P M 70 +/- P M 99 180 F PI / M 5 9 EE 3 M E 21 + M D 2 + P M 91 10 M 3 ; Начальный экран 2 PP M 9010 .NUM TITLE1 K M D 16 ENT 0 K M E .NUM TITLE2 K M D 32 ENT 0 K M E .NUM MESS11A K M D 40 ENT 0 K M E .NUM MESS11B K M D GAME_SELECT: P GSB GET_KEY RM 6 1 - P X!=0 SOLARS P X<0 GAME_SELECT ; Генерация системы пульсара 56 <-> K M E .NUM MESS11 K M D P GSB GET_KEY RM C P X=0 VALID_NUM K RAN 9 * 1 + K INT VALID_NUM: M 3 M 0 .NUM MESS12 P M 19 0 P M 72 1 EE 5 ; радиус излучения звезды K RAN + P M 18 1 EE 11 ; постоянная звезды M 4 1 EE 6 ; радиус орбиты базы P M 20 1 ; радиус базы P M 22 + M A 24 M 6 P GSB RAND_PLANETS RM 3 1 + M 3 ; Аварийный корабль в миссии 56 ENT 0 K M E .NUM MESS11D K M D P GSB GET_KEY RM C P X!=0 NO_RESCUE 1 P M 75 0 P M 27 10 P M 29 ; Ресурс аварийного корабля - от 6 до 12 часов K RAN 21600 * F ANS + K INT P M 76 NO_RESCUE: ; Планеты пульсара - без атмосфер 10 M 0 79 M 6 0 NO_ATM: K M 6 PF L0 NO_ATM 0,99 P M 74 21600 ; дается 6 часов на каждую планету RM 3 * P M 93 INIT: RM 4 P RM 20 / F SQRT M 0 ; Основной цикл BEGIN: ; Проверка входа в рой P RM 71 P X>=0 PRINT P RM 74 F SQRT P GSB COUNT_PROB P X<0 PRINT 1 P M 71 PRINT: 2 PP M 9010 RM C 5 * 19 + M 6 P RM 71 P X!=0 NO_SWARM 0 P M 17 <-> P X<0 NO_BELT1 RM C 9 - P X!=0 NO_SWARM .NUM MESS2B P GOTO NO_DATA NO_BELT1: .NUM MESS2A P GOTO NO_DATA NO_SWARM: P RM 75 P X!=0 NO_RESCUE1 RM C 1 - P X=0 NO_RESCUE1 P RM 29 P X<0 NO_RESCUED .NUM MISS P GOTO MISSION_OVER ; Вывод данных по миссии спасения и проверка ресурса NO_RESCUED: P RM 76 P X<0 STILL .NUM FAILED P GOTO MISSION_OVER STILL: .NUM SOS K M D 16 ENT 0 K M E .NUM PELENG K M D P RM 77 P GSB ROUND .NUM MESS21 K M D 24 ENT 0 K M E .NUM RANGE K M D P RM 28 P GSB ROUND .NUM MESS20 MISSION_OVER: K M D 32 ENT 0 K M E P GOTO DATA_RESCUE NO_RESCUE1: ; Вывод данных по Немезиде RM C 9 - P X=0 NO_NEMESIS2 P RM 95 P X!=0 NO_NEMESIS2 0 ENT 32 K M E .NUM MESS2C K M D 94 M 6 P GOTO CALC_NEMESIS NO_NEMESIS2: .NUM MESS2 K M D RM C P GSB ROUND CALC_NEMESIS: K RM 6 M 7 8 ENT 0 K M E P RM 17 P X=0 SHOW_ORBIT RM 7 .NUM MESS6A P GOTO SHOW_FIRST SHOW_ORBIT: RM A RM 7 - .NUM MESS6 SHOW_FIRST: K M D <-> P GSB ROUND .NUM MESS20 K M D 16 ENT 0 K M E P RM 17 P X=0 NEAR_AST1 .NUM MESS5 K M D K RM 6 M 2 P GSB ROUND .NUM MESS21 K M D P GOTO TEST_AST1 NEAR_AST1: .NUM MESS5A K M D RM A K RM 6 M 2 * RM 5 / P GSB ROUND .NUM MESS20 K M D TEST_AST1: 24 ENT 0 K M E .NUM MESS8 K M D K RM 6 M 8 K RM 6 P GSB ROUND .NUM MESS20 NO_DATA: K M D 32 ENT 0 K M E P RM 17 ; Вывод дополнительных параметров P X<0 DOP_PAR .NUM MESSD1 K M D P RM 94 P GSB ROUND 40 ENT 0 K M E .NUM MESSD2 K M D ; Если угол увеличивается COUNT_TIME: RM 2 P RM 79 RM 9 / ; Угловая скорость планет, кроме Немезиды P RM 95 P X!=0 NEM_SPEED F R P GOTO NEM_SPEED1 NEM_SPEED: F R RM 4 RM 7 / F SQRT RM 7 / RM 5 * - NEM_SPEED1: P X!=0 ZERO_SPEED1 / P X>=0 NO_CIRCLE 360 RM 2 +/- K SGN * RM 2 + M 2 P GOTO COUNT_TIME NO_CIRCLE: K ABS K INT P GSB ROUND .NUM MESS23 K M D ZERO_SPEED1: 48 ENT 0 K M E .NUM MESSD3 K M D RM A RM 7 - RM B P RM 92 - P X!=0 ZERO_SPEED2 / P X<0 ZERO_SPEED2 K ABS K INT P GSB ROUND .NUM MESS23 K M D ZERO_SPEED2: 56 ENT 0 K M E .NUM MESSD4 K M D P RM 73 P GSB SHOW_TIME P GOTO TEST_COMP DOP_PAR: P X=0 NEAR_AST DATA_RESCUE: .NUM MESS7 K M D RM A P GOTO TEST_AST2 NEAR_AST: RM C 9 - P X=0 SHOW_RAD P RM 95 P X!=0 SHOW_RAD P RM 20 - .NUM MESS7B P GOTO TEST_AST SHOW_RAD: RM 8 .NUM MESS7A TEST_AST: K M D <-> TEST_AST2: P GSB ROUND .NUM MESS20 K M D 40 ENT 0 K M E .NUM MESS3 K M D P RM 95 P X!=0 TEST_U1 RM C 9 - P X!=0 NO_TEST_U TEST_U1: RM C 1 - P X=0 TEST_U P RM 75 P X=0 NO_TEST_U TEST_U: P RM 17 P X=0 PLANET1 NO_TEST_U: RM 0 P GOTO SHOW_U PLANET1: RM 0 RM 4 RM 7 / F SQRT - SHOW_U: P GSB ROUND P RM 17 P X!=0 REL1 96 PP M 9020 REL1: .NUM MESS22 K M D 48 ENT 0 K M E .NUM MESS4 K M D RM C 9 - P X=0 NO_NEM_SEL P RM 17 P X=0 PLANET2 NO_NEM_SEL: RM B P GOTO SHOW_V PLANET2: RM B P RM 92 - SHOW_V: P GSB ROUND P RM 17 P X!=0 REL2 96 PP M 9020 REL2: .NUM MESS22 K M D ; Проверка исправности компьютера TEST_COMP: P RM 70 P X<0 NO_COMP 2 PP M 9010 NO_COMP: 56 ENT 0 K M E P RM 17 P X>=0 SHOW_NAME P X=0 SHOW_TEMP ; Вывод оставшегося времени/температуры P RM 99 P X>=0 SHOW_TEMP .NUM TEMP K M D <-> 40 / 25 + K INT P GSB ROUND .NUM MESS21 K M D P GOTO SHOW_NAME SHOW_TEMP: .NUM MESS9 K M D P RM 93 P GSB SHOW_TIME ; Вывод названия планеты или минерала SHOW_NAME: P RM 70 P X>=0 NOT_OPEN P RM 95 P X!=0 NO_TEST_MISS RM C 9 - P X!=0 NOT_OPEN 8 + P X=0 NO_TEST_MISS P RM 75 P X=0 NOT_OPEN NO_TEST_MISS: 0 ENT 60 K M E P RM 19 K RM 6 P X>=0 OPEN_AST P X=0 NOT_OPEN OPEN_AST: K ABS 3,5 - P X=0 NO_CERES CX 5,5 NO_CERES: F ANS + 11 * + K M D ; Является ли планета целью? P RM 90 P X=0 SHOW_STAR P RM 78 P X!=0 NOT_OPEN RM C - P X=0 NOT_OPEN SHOW_STAR: 0 ENT 48 K M E 42 PP M 9020 NOT_OPEN: P GSB GET_KEY ; Действия в режиме индикации RM C P X=0 ZERO_KEY P RM 90 P X!=0 ZERO_KEY ; Показ информации о звезде STAR_SHOW: 2 PP M 9010 .NUM STAR0 K M D 16 ENT 0 K M E .NUM STAR1 K M D P RM 98 EE 1 K INT 10 / P GSB ROUND .NUM STAR2 K M D 32 ENT 0 K M E .NUM STAR3 K M D P RM 97 10 * K INT 10 / P GSB ROUND .NUM STAR4 K M D 48 ENT 0 K M E .NUM STAR5 K M D RM 3 P GSB ROUND P GOTO NOT_OPEN ZERO_KEY: RM 6 32 - P X!=0 DEATH1 ; Самоубийство 1 - P X=0 SAVE_FILE P GSB WRITE_FILE P GOTO PRINT SAVE_FILE: RM 6 13 - P X!=0 CALC 1 + P X=0 NO_SWITCH RM C 1 - P X=0 CAN_SWITCH P RM 75 P X=0 NO_SWITCH CAN_SWITCH: P RM 17 P X=0 SWITCH0 1 P GOTO SWITCH1 SWITCH0: 0 SWITCH1: P M 17 NO_SWITCH: ; Переключение в доп. режим и обратно RM 6 19 - P X=0 NO_MODE P RM 17 +/- P M 17 NO_MODE: RM 6 14 - P X=0 PRINT ; Проверка исправности двигателя P RM 70 K ABS 2 - P X!=0 CALC ; Ввод маневра ENTER: K SCR .NUM MESS0 PP M 9026 P RM 70 P X<0 COMP_OK 0 ENT P GOTO STOP COMP_OK: RM 0 RM B STOP: P RM 15 RM 9 ; Главный останов R/S P X>=0 ENTER P X!=0 ENTER M 9 F R ; Проверка коэф-та гравитации (модуль<=10) P M 15 K ABS 11 - P X<0 ENTER ; Проверка наличия щита и расстыковки с ним P RM 78 P X<0 CALC P RM 15 P X<0 CALC 0 P M 78 4 P M 72 ; Очки за полет к Солнцу 15 EE 6 RM A - P X>=0 CALC 1 EE 4 / K INT P RM 94 + P M 94 CALC: P RM 70 K ABS 2 - P X=0 ENGINE_OK ; Поврежденный двигатель K RAN 21 * K INT 10 - P M 15 RM A P RM 18 / 60 * K INT M 9 ; Проверка характерных времен ENGINE_OK: RM 9 RM A RM 0 P X!=0 LIM_U / K ABS 10 / - P X>=0 LIM_U F ANS K INT M 9 LIM_U: RM 9 RM A RM B P X!=0 LIM_V / K ABS 10 / - P X>=0 LIM_V F ANS K INT M 9 LIM_V: ; Время полета и ресурс P RM 73 RM 9 + P M 73 P RM 75 P X!=0 NO_DECRES P RM 76 P X>=0 NO_DECRES RM 9 - P X<0 NO_DECRES P RM 94 1 EE 3 - P M 94 <-> NO_DECRES: P M 76 P RM 93 RM 9 - P M 93 ; Проверка гибели от удушья P X>=0 DEATH1 RM 9 RM A / ENT RM B * 1 - * RM 0 * RM 5 * +/- P M 79 M 2 ; Движение Немезиды P RM 95 P X!=0 NO_NEMESIS1 P RM 92 RM 9 * + P M 95 P RM 20 - P X>=0 DEATH6 P RM 96 RM 2 + P M 96 NO_NEMESIS1: ; Подготовка цикла углов P GSB CYC_PREPARE ; Расчет новых углов всех планет AST_ANG_CYC: RM 4 K RM 6 M 7 / F SQRT RM 7 / RM 5 * RM 9 * K RM 6 <-> - RM 2 + 180 - P X<0 LBL2 LBL3: F ANS + F ANS + P X>=0 LBL3 LBL2: F ANS - PK M 6 K RM 6 K RM 6 K RM 6 PF L0 AST_ANG_CYC P RM 16 M 0 ; Радиальная траектория? RM 2 K ABS 1 EE 6 +/- - P X<0 NO_RADIAL ; Летим по радиальной траектории RM A RM 0 * RM A RM B RM 9 * + M A / M 0 P GOTO STAR_TEST NO_RADIAL: P RM 15 P RM 72 ; коэфф-т усиления двигателя F 10^X * RM 4 * M 7 ; Ближе 29 млн.км от Солнца гравитация не усиливается P RM 72 P X!=0 LINEARG RM A P RM 18 - P X<0 LINEARG RM A F ANS / RM 7 * M 7 LINEARG: ; Начинаем основные вычисления RM A RM 0 * ENT ENT M 8 RM B * F X^2 <-> RM 0 * RM 7 - <-> F ANS F X^2 + F SQRT P X!=0 PRINT M A / M 1 ; Проверка аргумента арккосинуса (модуль<=1) K ABS 1 - P X>=0 CORR_ACOS RM 1 K SGN M 1 CORR_ACOS: RM 1 F ARCCOS RM B RM 0 * P X<0 LBL1 <-> +/- <-> LBL1: F R RM 2 + M 2 F SIN RM 8 / RM A * M B RM 8 RM A RM 2 F COS * RM 7 + / F 1/X M 0 RM 8 <-> / M A STAR_TEST: ; Проверка отлета к звезде/обратно RM B P RM 72 F 10^X - P X>=0 STARSPEED 5 EE 9 M 1 P RM 90 P X!=0 GO_HOME P RM 20 M 1 GO_HOME: RM A RM 1 - P X>=0 STARSPEED ; Показ звезд 3 PP M 9010 99 M 1 NEXT_STAR: K RAN 30 * 34 + K RAN 128 * PP M 9011 PF L1 NEXT_STAR ; Начинается полет к звезде или обратно P RM 90 P X=0 SOLARS P RM 95 P X=0 DEATH6 P GOTO STARGEN ; Проверка пояса астероидов STARSPEED: P RM 72 P X!=0 NO_LEAVE P RM 90 P X=0 NO_LEAVE RM A 54 EE 7 - P X<0 NO_BELT RM A 33 EE 7 - P X>=0 NO_BELT P RM 71 1 +/- P M 71 <-> P X<0 PRINT ; Не сломан ли компьютер/двигатель P RM 70 1 - P X=0 TEST_IMPACT P RM 74 ; Вероятность встретить астероид P GSB COUNT_PROB P X<0 TEST_IMPACT 16 ENT 0 K M E .NUM BELT K M D ; Начисление очков за размер астероида K RAN 90 * 10 + K INT P GSB ROUND .NUM MESS20 K M D <-> P RM 94 + P M 94 P GSB GET_KEY P GOTO TEST_IMPACT ; Проверка выхода из пояса NO_BELT: P RM 71 P X<0 NO_LEAVE 0 P M 71 NO_LEAVE: ; Проверка гибели от излучения P RM 72 P X!=0 NO_SUN RM A 5 EE 6 - P X>=0 DEATH3 NO_SUN: P RM 78 P X>=0 NO_METEOR P RM 18 RM A P GSB CALC_TEMP P X>=0 TEST_IMPACT ; Гибель от тепла или радиации RM A P RM 18 2 / - P X>=0 DEATH3 P GOTO DEATH5 TEST_IMPACT: P RM 71 P X!=0 NO_METEOR ; Проверка попадания метеорита (1%/0,1%) P RM 74 F SQRT P GSB COUNT_PROB P X<0 NO_METEOR 16 ENT 0 K M E .NUM BREAK0 K M D K RAN ; место попадания 5 * K INT P X=0 LOSE_OXYGEN ; Повреждение двигателя 99 F 1/X K RAN F X^Y P RM 72 * P M 72 .NUM BREAK3 P GOTO SHOW_DAMAGE LOSE_OXYGEN: ; Потеря кислорода от метеорита 1 - P X=0 LOSE_TERMO P RM 93 K RAN F SQRT * K INT P M 93 .NUM BREAK2 P GOTO SHOW_DAMAGE LOSE_TERMO: ; Потеря части терморадиозащиты 1 - P X=0 LOSE_ENGINE P RM 18 K FRAC F X^2 P RM 18 K RAN F SQRT F SQRT / K INT + P M 18 .NUM BREAK1 P GOTO SHOW_DAMAGE LOSE_ENGINE: ; Заклинивание двигателя 1 - P X=0 LOSE_COMP 2 P RM 70 K SGN * P M 70 .NUM BREAK5 P GOTO SHOW_DAMAGE LOSE_COMP: P RM 70 K ABS +/- P M 70 .NUM BREAK4 ; Отчет о попадании SHOW_DAMAGE: K M D P GSB GET_KEY P GOTO NO_REPAIR NO_METEOR: ; Проверка ремонта (1%/0,1%) P RM 74 P GSB COUNT_PROB P X<0 NO_REPAIR 1 P M 70 NO_REPAIR: ; Проверка выхода из роя (10%/1%) P RM 71 P X>=0 NO_EXIT P RM 74 F LG EE 1 F 10^X P GSB COUNT_PROB P X<0 NO_EXIT 0 P M 71 NO_EXIT: ; Расчет дистанции до Немезиды P RM 95 P X!=0 PREPARE RM A - F X^2 RM A P RM 96 * RM 5 / F X^2 + F SQRT P RM 97 - P X>=0 DEATH4 P M 98 ; Проверка выполнения миссии 1 EE 3 - P X<0 PREPARE RM B P X<0 PREPARE P RM 71 P X=0 PREPARE P M 95 P RM 94 3 EE 3 + P M 94 ; Победный экран 3 PP M 9010 0 ENT 24 K M E .NUM MISS1 K M D 12 ENT 40 K M E .NUM BIG_EARTH PP M 9015 P GSB GET_KEY P GOTO PRINT ; Подготовка цикла расстояний PREPARE: P GSB CYC_PREPARE ; Расчет новых расстояний до всех планет AST_DIST_CYC: K RM 6 M 7 M 1 RM A K RM 6 * RM 5 / F X^2 RM A RM 7 - F X^2 + F SQRT K RM 6 - K M 6 M 7 K RM 6 M 8 <-> P X>=0 NO_SOLAR P RM 90 P X!=0 NO_STAR P RM 70 P X>=0 NO_STAR ; Проверка изучения планеты у звезды RM 8 P X=0 NO_NEW_EARTH RM 3 RM 0 - 81 + M 8 RM 7 K RM 8 - P X<0 TEST_LANDING ; Новый Эдем! P RM 94 1 EE 3 + P M 94 11 +/- PK M 6 RM 6 M 1 P GSB SHOW_EARTH RM 1 M 6 P GOTO TEST_LANDING NO_NEW_EARTH: 10 + P X=0 TEST_LANDING 1 P RM 74 - 1 EE 7 RM 7 / * 1 <-> - P GSB COUNT_PROB P X<0 TEST_LANDING RM 3 RM 0 - 1 + M C RM 1 P RM 18 / 3 - ; Планеты "Меркурии" P X<0 NEXT_GR1 1 ENT 0 P GOTO CALC_PLAN NEXT_GR1: 7 - ; Планеты "группы Нового Эдема" P X<0 NEXT_GR2 K RAN 3 * K INT P X!=0 CALC_PLAN1 1 + P GOTO CALC_PLAN1 NEXT_GR2: ; Планеты-"гиганты" 4 ENT 4 CALC_PLAN: K RAN * + K INT CALC_PLAN1: +/- PK M 6 ; Планета исследована P RM 94 250 + P M 94 P GOTO TEST_LANDING ; Проверка, даются ли очки за подлет к планетам NO_STAR: P RM 72 P X!=0 NO_SOLAR P RM 78 P X>=0 NO_SOLAR RM 7 1 EE 4 - P X<0 CYC_OVER P RM 78 P X!=0 SOLAR_SCORE 10 RM 0 - - P X=0 TEST_LANDING ; Подсчет очков (если меньше 10000 км) SOLAR_SCORE: 1 EE 4 RM 7 / K INT RM 9 100 / * RM 8 K ABS * K INT P RM 78 K SGN 1 + * P RM 94 + P M 94 ; Проверка приземления TEST_LANDING: RM 7 6 EE 3 ; Пределы любой атмосферы - P X<0 CYC_OVER RM 3 RM 0 - P RM 90 + P X=0 NO_EARTH RM 7 P RM 80 - P X<0 NO_EARTH P GSB CALC_SPEED 0,1 - P X<0 DEATH4 P GOTO WIN ; Проверка гибели в атмосфере NO_EARTH: RM 3 P RM 90 + RM 0 - 80 + M 8 K RM 8 P X!=0 CYC_OVER RM 7 P GSB CALC_TEMP P X<0 DEATH3 P GOTO CYC_OVER ; Далее - проверки для системы пульсара NO_SOLAR: RM 7 P X<0 NOT_END ; Проверка условий успешного возвращения RM 3 RM 0 - P X=0 DEATH4 RM A P RM 20 - P X>=0 DEATH4 P GSB CALC_SPEED 0,01 - P X<0 DEATH4 P GOTO PULSAR_WIN WIN: ; Победный экран P GSB SHOW_EARTH PULSAR_WIN: .NUM MESS10 M 2 P GOTO RETURN NOT_END: ; Расчет точной дистанции для спасательной миссии P RM 75 P X!=0 NO_PELENG RM 6 29 - P X=0 NO_PELENG P RM 25 F X^2 RM A F X^2 + P RM 25 RM A P RM 26 F COS * * 2 * - F SQRT P M 28 M 7 ; Пеленг F X^2 RM A F X^2 + P RM 25 F X^2 - 2 RM 7 RM A * * / F ARCCOS P RM 26 K SGN * P M 77 RM 7 1 EE 3 ; радиус спасения корабля в миссии P GOTO TEST_MISSION NO_PELENG: ; Работа планетного зонда RM 7 K RAN 500 * TEST_MISSION: - P X<0 CYC_OVER P RM 70 P X>=0 CYC_OVER RM 8 P X>=0 CYC_OVER ENT ENT 100 * ; Номер планеты * 100 очков P RM 94 + P M 94 F R +/- PK M 6 CYC_OVER: PF L0 AST_DIST_CYC P RM 16 M 0 P GOTO BEGIN ; Конец игры DEATH1: .NUM MESS1A P GOTO LOSE DEATH3: .NUM MESS1B P GOTO LOSE DEATH4: .NUM MESS1C P GOTO LOSE DEATH5: .NUM MESS1D P GOTO LOSE DEATH6: .NUM MESS1E P GOTO LOSE DEATH7: 0 P M 73 .NUM MESS1F LOSE: M 2 ; При уничтожении Немезиды за смерть очки не обнуляются P RM 95 P X!=0 BURN P RM 97 P X!=0 RETURN BURN: 0 P M 94 RETURN: 1 +/- M 3 P GSB WRITE_FILE 2 PP M 9010 RM 2 K M D ; Время полета 16 ENT 0 K M E .NUM MESSD4 K M D P RM 73 P GSB SHOW_TIME ; Окончательный счет 32 ENT 0 K M E .NUM SCORE K M D P RM 94 P GSB ROUND P GSB GET_KEY R/S ; Генерация Солнечной системы SOLARS: 10 M 3 M 0 19 M 6 P RM 90 M 8 0 P M 18 P M 20 P M 90 P GSB RAND_PLANETS ; для заполнения углов и расстояний 6371 P M 22 1327 EE 8 ; постоянная Солнца M 4 1496 EE 5 ; орбита Земли P M 20 ; Проверяем, возвращаемся ли со звезд RM 8 P X!=0 SUN_SHIP INTERSTELLAR2: P GSB STAR_WAY RM 4 P RM 20 * F SQRT 5 EE 9 M A / M 0 RM B +/- M B 1 P GOTO SET_TIME SUN_SHIP: <-> M A ; Земля и корабль P RM 22 1 EE 3 ; корабль на 1000-км орбите Земли P M 23 + RM 5 * RM A / +/- P M 21 56 ENT 0 K M E .NUM TITLE4 K M D P GSB GET_KEY RM C P X!=0 NO_NEMESIS ; Генерация Немезиды 5 EE 9 P M 95 K RAN 2 EE 3 * F ANS + +/- P M 92 / RM 4 P RM 20 / F SQRT P RM 20 / RM 5 * * P M 96 100 P M 97 3 ENT P GOTO SET_TIME NO_NEMESIS: 2 PP M 9010 .NUM TITLE3 K M D 16 ENT 0 K M E .NUM TITLE3A K M D 24 ENT 0 K M E .NUM TITLE3B K M D 32 ENT 0 K M E .NUM TITLE3C K M D 40 ENT 0 K M E .NUM TITLE3D K M D 48 ENT 0 K M E .NUM TITLE3E K M D 56 ENT 0 K M E .NUM TITLE3F K M D WAIT_TASK: P GSB GET_KEY RM C P X!=0 NO_TASK ; Генерация задания - номера планеты 1 - P X=0 NEXT_TASK1 1 ENT 1 ENT 3 P GOTO MAKE_TASK NEXT_TASK1: 1 - P X=0 NEXT_TASK2 2 ENT 4 ENT 4 P GOTO MAKE_TASK NEXT_TASK2: 1 - P X=0 NEXT_TASK3 3 ENT 8 ENT 2 P GOTO MAKE_TASK NEXT_TASK3: 1 - P X=0 NEXT_TASK4 3 ENT 1 ENT 9 P GOTO MAKE_TASK NEXT_TASK4: 1 - P X=0 WAIT_TASK ; Полёт к Солнцу 1 +/- P M 78 3 P M 72 1 ENT P GOTO SET_TIME MAKE_TASK: K RAN * + K INT P M 78 <-> P GOTO SET_TIME NO_TASK: 2 ENT SET_TIME: 216 EE 4 ; 600 часов * P M 93 ; время на полёт 0 M C P M 24 P M 81 P M 88 P M 89 EE 2 P M 80 P M 83 ; Меркурий 579 EE 5 P M 25 2 / K RAN + P M 18 ; радиус излучения Солнца 2439 P M 27 1 +/- P M 29 ; Венера 1082 EE 5 P M 30 6052 P M 32 2 +/- P M 34 250 P M 82 ; Марс 2279 EE 5 P M 35 3397 P M 37 3 +/- P M 39 ; Юпитер 7783 EE 5 P M 40 71492 P M 42 4 +/- P M 44 5 EE 3 P M 84 ; Сатурн 1249 EE 6 P M 45 60268 P M 47 5 +/- P M 49 1 EE 3 P M 86 P M 87 3 * P M 85 ; Уран 2871 EE 6 P M 50 25559 P M 52 6 +/- P M 54 ; Нептун 4504 EE 6 P M 55 24746 P M 57 7 +/- P M 59 ; Плутон 5914 EE 6 P M 60 1160 P M 62 8 +/- P M 64 ; Церера 414 EE 6 P M 65 475 P M 67 3,5 +/- P M 69 P GOTO INIT ; Генерация системы звезды STARGEN: CX P M 17 P M 71 1 M C P M 90 P M 96 ; Энергия K RAN 5 * 5 + P M 98 INTERSTELLAR1: P GSB STAR_WAY K RAN 7 * 3 + K INT M 3 M 0 24 M 6 RM 4 K RAN 3 * 1 + 2 / P M 97 * M 4 F ANS P RM 18 * P M 18 100 * P M 20 M A RM 5 M 1 80 M 5 P GSB RAND_PLANETS RM 1 M 5 RM 4 RM A / F SQRT M 0 RM B +/- M B 432 EE 4 P M 93 P GOTO STAR_SHOW ; Генерация планет RAND_PLANETS: P RM 72 P X=0 NO_PULSAR ; Система пульсара K RAN P RM 20 P RM 18 2 * M 7 - * RM 7 + P GOTO NEXT_STEP NO_PULSAR: ; Звездная система K RAN 2 * K INT P X=0 OUTER 2 ENT 8 P GOTO REGION OUTER: 10 ENT 90 REGION: K RAN * + P RM 18 * NEXT_STEP: M 7 K M 6 K RAN 360 * 180 - K M 6 P RM 90 P X=0 STAR_PLAN ; Планеты пульсара K RAN 900 ; (максимальный размер - мин.размер) * 100 ; минимальный размер + K M 6 CX K M 6 K RAN 5 * 1 + K INT K M 6 P GOTO NEXT_PLAN ; Планеты звезды STAR_PLAN: K RAN 7 EE 3 * 3 EE 3 + RM 7 P RM 18 10 * - P X>=0 EARTH_TYPE <-> 10 * <-> CX 3 EARTH_TYPE: P X<0 LOW_ATM CX 1 LOW_ATM: <-> K M 6 ; Атмосфера * 50 / K M 5 0 K M 6 10 +/- K M 6 NEXT_PLAN: PF L0 RAND_PLANETS RTN ; Межзвездный перелет STAR_WAY: RM 3 P X!=0 NEXT_MONTH 1 P M 93 ; Осталось P M 97 ; Контроль CX M 2 NEXT_MONTH: 9 M 3 0 ENT 4 K M E .NUM FLY0 K M D 32 PP M 9020 P RM 96 P GSB SHOW_PERCENT 8 ENT 4 K M E .NUM FLY3 K M D P RM 97 P GSB SHOW_PERCENT 16 ENT 4 K M E .NUM FLY2 K M D RM B P GSB ROUND .NUM MESS22 K M D 32 PP M 9020 PP M 9020 24 ENT 4 K M E .NUM MESSD4 K M D RM 2 0,5 + K INT P GSB ROUND 47 PP M 9020 P RM 98 24 * 1 + K INT P GSB ROUND .NUM FLY5 K M D WAIT_TURN: P GSB GET_KEY RM 6 33 - P X=0 NO_STAR_FILE M 3 P GSB WRITE_FILE P GOTO NEXT_MONTH NO_STAR_FILE: RM 6 2 - P X=0 NOSDEC ; Уменьшение скорости на 1% RM B 0,99 * M B P GOTO ACT_OVER NOSDEC: 6 - P X=0 NOIDEC ; Увеличение скорости на 1% RM B 1,01 * M B P GOTO ACT_OVER NOIDEC: 3 + P X=0 WAIT_TURN ; Считаем, сколько процентов пролетели за месяц ACT_OVER: P RM 93 P RM 98 24 * F 1/X M 1 RM B 15 EE 4 ; Половина скорости света / M A * - P M 93 P X>=0 WAY_OVER ; Сколько месяцев летим RM 2 RM A + M 2 ; Сколько потреблено энергии P RM 96 RM 1 2 / - P M 96 P X>=0 DEATH7 ; Изменения контроля P RM 97 RM A 1 - K SGN F ANS F X^2 * 20 / - 1 - P X>=0 NOT_EXCEED 0 ENT NOT_EXCEED: 1 + P M 97 ; Случилась ли катастрофа? K RAN - P X>=0 DEATH7 P GOTO NEXT_MONTH WAY_OVER: RTN ; Нажатие клавиши GET_KEY: K GRPH GET_KEY1: PP RM 9029 M 6 K NOT P X!=0 GET_KEY1 RM 6 14 - P X!=0 KEY_OK RM 6 13 - P X!=0 KEY_OK RM 6 12 - P X!=0 KEY_OK RM 6 19 - P X!=0 KEY_OK RM 6 32 - P X!=0 KEY_OK RM 6 33 - P X!=0 KEY_OK RM 6 RM 3 P RM 90 + - P X<0 GET_KEY1 RM 6 M C KEY_OK: RTN ; Запись в файл Grav WRITE_FILE: 0 M 7 9047 P M 8 100 M 1 ; число использованных регистров ; В цикле переписываем все регистры в ЭОЗУ REWRITE: 1 K M 8 K RM 7 K M 7 RM 7 1 + M 7 PF L1 REWRITE P GSB FIND_FILE M 7 1 - P X=0 SAVE_READY P GSB CREATE_FILE P GSB FIND_FILE M 7 SAVE_READY: RM 7 PP M 9128 PP M 9126 RM 3 P X>=0 NO_OUT 2 PP M 9010 .NUM MESS24 K M D P GSB GET_KEY NO_OUT: RTN ; Поиск файла Grav FIND_FILE: 0 PP M 9030 1 PP M 9120 63 M 1 READ_DIR: 3 PP M 9031 RM 1 PP M 9122 PP RM 9034 71 - P X=0 NEXT_ROW PP RM 9034 114 - P X=0 NEXT_ROW PP RM 9034 97 - P X=0 NEXT_ROW PP RM 9034 118 - P X=0 NEXT_ROW PP M 9031 PP RM 9033 4 - P X!=0 FILE_FOUND NEXT_ROW: PF L1 READ_DIR FILE_FOUND: RM 1 RTN ; Создание файла Grav CREATE_FILE: 3 PP M 9031 71 PP M 9034 114 PP M 9034 97 PP M 9034 118 PP M 9034 16 M 1 FILL_NAME: 32 PP M 9034 PF L1 FILL_NAME 4 PP M 9128 PP M 9125 RTN ; Подготовка цикла планет CYC_PREPARE: RM 0 P M 16 RM 3 M 0 P RM 90 5 * 19 + M 6 RTN ; Расчет вероятности (за каждую минуту) COUNT_PROB: RM 9 60 / <-> F X^Y K RAN - RTN ; Расчет температуры корабля CALC_TEMP: / P RM 18 K FRAC 1,5 + 2 / / F LN RM 9 * P RM 99 + 273 +/- - P X>=0 ABS_ZERO F ANS + K INT ABS_ZERO: F ANS P M 99 1 EE 3 - RTN ; Вычисление полной скорости CALC_SPEED: P RM 16 RM 4 P RM 20 / F SQRT - F X^2 RM B F X^2 + F SQRT RTN ; Вывод времени в формате ДД : ЧЧ : ММ SHOW_TIME: M 8 86400 / K INT P GSB SHOW_DIVIDER 86400 * RM 8 <-> - 3600 / K D->M M 8 K INT P GSB SHOW_DIVIDER RM 8 K FRAC 100 * K INT P GSB ROUND RTN ; Вывод двоеточия с пробелами SHOW_DIVIDER: P GSB ROUND 32 PP M 9020 <-> 58 PP M 9020 <-> 32 PP M 9020 <-> RTN ; Вывод процентов SHOW_PERCENT: 1 EE 4 * K INT 100 / P GSB ROUND .NUM FLY4 K M D 32 PP M 9020 PP M 9020 PP M 9020 RTN ; Округление до сотых ROUND: 1 EE 3 * K INT 1 EE 3 / PK M 91 RTN ; Показ Земли SHOW_EARTH: 3 PP M 9010 8 ENT 40 K M E .NUM BIG_EARTH PP M 9015 P GSB GET_KEY RTN MESS0: .TEXT "Ввод маневра\0" MESS1A: .TEXT "Экипаж погибает от удушья.\0" MESS1B: .TEXT "Вспышка. Корабль сгорает.\0" MESS1C: .TEXT "Удар. Корабль разбивается.\0" MESS1D: .TEXT "Экипаж погиб от радиации.\0" MESS1F: .TEXT "Корабль погиб среди звёзд.\0" MESS1E: .TEXT "ЗЕМЛЯ ПОГИБЛА!\0" MESS2: .TEXT "Планета \0" MESS2A: .TEXT "Метеоритный рой!\0" MESS2B: .TEXT "Пояс астероидов\0" MESS2C: .TEXT "<Немезида>\0" MESS3: .TEXT "UTRN: \0" MESS4: .TEXT "VRAD: \0" MESS5: .TEXT "ANGL: \0" MESS5A: .TEXT "DHOR: \0" MESS6: .TEXT "DORB: \0" MESS6A: .TEXT "RORB: \0" MESS7: .TEXT "DSTR: \0" MESS7A: .TEXT "RPLN: \0" MESS7B: .TEXT "DNEE: \0" MESS8: .TEXT "DPLN: \0" MESS9: .TEXT "Ресурс \0" MESSD1: .TEXT "SCOR: \0" MESSD2: .TEXT "TTRN: \0" MESSD3: .TEXT "TRAD: \0" MESSD4: .TEXT "Время полета \0" MESS10: .TEXT "С ВОЗВРАЩЕНИЕМ!\0" MESS11A: .TEXT "0 - нейтронная звезда\0" MESS11B: .TEXT "1 - Солнечная система\0" MESS11: .TEXT "Число планет:\0" MESS11D: .TEXT "Миссия 'Спасение'?\0" MESS12: .TEXT "(БАЗА) \t\t\t\0" MESS13: .TEXT "(Медь) \t\t\t\0" MESS14: .TEXT "(Титан) \t\t\0" MESS15: .TEXT "(Серебро) \0" MESS16: .TEXT "(Золото) \t\0" MESS17: .TEXT "(Платина) \0" PLAN0: .TEXT "(Земля)\t\t\t\0" PLAN1: .TEXT "(Меркурий)\0" PLAN2: .TEXT "(Венера)\t\t\0" PLAN3: .TEXT "(Марс)\t\t\t\t\0" PLAN4: .TEXT "(Юпитер)\t\t\0" PLAN5: .TEXT "(Сатурн)\t\t\0" PLAN6: .TEXT "(Уран)\t\t\t\t\0" PLAN7: .TEXT "(Нептун)\t\t\0" PLAN8: .TEXT "(Плутон)\t\t\0" PLAN9: .TEXT "(Церера)\t\t\0" STAR: .TEXT "\0" STAR1: .TEXT "До Земли \0" NEW_EDEM: .TEXT "НОВЫЙ ЭДЕМ\0" STAR0: .TEXT "* ЗВЕЗДА *\0" STAR2: .TEXT " св.лет\0" STAR3: .TEXT "Размер \0" STAR4: .TEXT " Солнца\0" STAR5: .TEXT "Число планет: \0" SOS: .TEXT "Принят сигнал SOS!\0" MISS: .TEXT "Миссия выполнена!\0" MISS1: .TEXT "ЗЕМЛЯ СПАСЕНА!\0" FAILED: .TEXT "Миссия не удалась.\0" TEMP: .TEXT "Температура \0" PELENG: .TEXT "PLNG: \0" RANGE: .TEXT "RANG: \0" MESS20: .TEXT " км\0" MESS21: .TEXT " гр\0" MESS22: .TEXT " км/c \0" MESS23: .TEXT " c\0" MESS24: .TEXT "Файл сохранён.\0" SCORE: .TEXT "Cчёт: \0" TITLE1: .TEXT "ГРАВИЛЁТ-XXI. Версия 2.2\0" TITLE2: .TEXT "Место действия:\0" TITLE3: .TEXT "Выбор задания:\0" TITLE3A: .TEXT "0 - свободный полёт\0" TITLE3B: .TEXT "1 - земная группа\0" TITLE3C: .TEXT "2 - планеты-гиганты\0" TITLE3D: .TEXT "3 - малые планеты\0" TITLE3E: .TEXT "4 - вся система\0" TITLE3F: .TEXT "5 - полет к Солнцу\0" TITLE4: .TEXT "Прилёт Немезиды?\0" BELT: .TEXT "Найден астероид \0" BREAK0: .TEXT "Попадание в \0" BREAK1: .TEXT "термоблок!\0" BREAK2: .TEXT "резервуар!\0" BREAK3: .TEXT "двигатель!\0" BREAK4: .TEXT "компьютер!\0" BREAK5: .TEXT "регулятор!\0" FLY0: .TEXT "Энергия \0" FLY2: .TEXT "Скорость \0" FLY3: .TEXT "Контроль \0" FLY4: .TEXT " % \0" FLY5: .TEXT " мес\0" BIG_EARTH: .DB 02Fh, 02Eh, 000h, 000h, 0E0h, 001h, 000h, 000h, .DB 000h, 000h, 01Fh, 03Eh, 000h, 000h, 000h, 0E0h, .DB 000h, 0C0h, 001h, 000h, 000h, 010h, 000h, 000h, .DB 002h, 000h .DB 000h, 00Ch, 000h, 000h, 00Ch, 000h, 000h, 002h, .DB 000h, 000h, 010h, 000h, 080h, 001h, 000h, 000h, .DB 060h, 000h, 040h, 000h, 0F8h, 000h, 080h, 000h, .DB 040h, 01Ch, 0FCh, 001h, 080h, 000h .DB 020h, 01Eh, 0FCh, 003h, 000h, 001h, 030h, 03Fh, .DB 0FEh, 003h, 000h, 002h, 030h, 07Fh, 0FFh, 003h, .DB 000h, 002h, 038h, 03Fh, 0FFh, 003h, 000h, 004h, .DB 034h, 03Fh, 0FFh, 007h, 000h, 008h .DB 004h, 03Fh, 0FFh, 01Fh, 000h, 008h, 084h, 01Fh, .DB 0FFh, 0FFh, 000h, 008h, 082h, 01Fh, 0FFh, 0FFh, .DB 007h, 010h, 0FAh, 07Fh, 0FFh, 0FFh, 0FFh, 010h, .DB 0FAh, 03Fh, 0FFh, 0FFh, 0FFh, 011h .DB 0FAh, 01Fh, 0FFh, 0FFh, 0FFh, 011h, 0FAh, 00Fh, .DB 0FFh, 0FFH, 0FFh, 011h, 0F9h, 01Fh, 0FFh, 0FFh, .DB 0FFh, 021h, 0F9h, 01Fh, 0FFh, 0FFh, 0FFh, 021h, .DB 0E1h, 00Fh, 0FBh, 0FFh, 07Fh, 020h .DB 0C3h, 01Fh, 0E3h, 0FFh, 01Fh, 020h, 0C7h, 067h, .DB 0CFh, 01Fh, 000h, 020h, 0C6h, 0E3h, 09Fh, 003h, .DB 000h, 010h, 0FEh, 0E3h, 03Fh, 001h, 03Ch, 010h, .DB 0FEh, 0E3h, 0FFh, 000h, 07Eh, 010h .DB 0E6h, 0FFh, 0FFh, 000h, 018h, 010h, 0E6h, 0FFh, .DB 0FFh, 000h, 000h, 010h, 0F8h, 0FCh, 0F9h, 000h, .DB 000h, 008h, 0FCh, 0F8h, 0E1h, 000h, 000h, 008h, .DB 0FCh, 0F3h, 04Fh, 000h, 000h, 008h .DB 0F8h, 0F7h, 01Fh, 000h, 000h, 004h, 0F0h, 0FFh, .DB 01Fh, 000h, 000h, 002h, 0F0h, 0FFh, 01Fh, 000h, .DB 000h, 002h, 0E0h, 0FFh, 01Fh, 000h, 000h, 001h, .DB 0C0h, 0FFh, 01Fh, 000h, 080h, 000h .DB 0C0h, 0FFh, 01Fh, 000h, 080h, 000h, 080h, 0FFh, .DB 00Fh, 000h, 060h, 000h, 000h, 0FEh, 00Fh, 000h, .DB 010h, 000h, 000h, 0FCh, 01Fh, 000h, 00Ch, 000h, .DB 000h, 0F0h, 0FFh, 000h, 002h, 000h .DB 000h, 0E0h, 0FFh, 0CFh, 001h, 000h, 000h, 000h, .DB 0FFh, 03Fh, 000h, 000h, 000h, 000h, 0E0h, 001h, .DB 000h, 000h .END Файлы программ доступны на странице "Игры" |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
НПП "СЕМИКО" (383) 271-01-25 (многоканальный) |