Техника - молодёжи 1987-06, страница 55

Техника - молодёжи 1987-06, страница 55

lb

РАБОТА БЕЗ ОСТАНОВА

Как-то раз наш клуб проводил товарищескую встречу с командой раздела «Человек и компьютер» из журнала «Наука и жизнь». Встреча эта, надо сказать, состоялась на выезде, в гостях, на «чужом поле», без привычной поддержки родных стен и болельщиков. Стоит ли удивляться, что наши ворота не остались в неприкосновенности: молодой форвард соперника Алексей Бойко, обманув бдительность защиты серией хитрых финтов (игры КЭИ, дескать, не только электронны, но и весьма неплохи, нестандартные приемы нестандартны и т. д.), вышел с голкипером один на один и нанес решающий удар в ближний угол: «Не понимаю только, почему вы игнорируете динамические игры?»

Последующий диалог, хотя и являл собою «игру в одни ворота» (к сожалению, даже не электронную), все-таки заслуживает того, чтобы быть частично воспроизведенным.

— Какие-какие?

— Динамические. В реальном масштабе времени.

— На компьютере?

— На ПМК.

— А как смотреть результат?

— В режиме мерцания.

— А как вводить воздействие?

— Переключателем Р—Г...

И так далее в том же духе. Словом, команда КЭИ потерпела первое за два сезона чувствительное поражение.

Можно ли было его избежать? Несомненно. Вот, например, какое письмо поступило в наш адрес буквально несколько дней спустя от Дария Аксель-рода из Ленинграда. «Хочу сообщить, что веду исследования в неизвестной для КЭИ области динамичных игр. При помощи переключателя Р—ГРД—Г можно направлять ход вычислений по трем ветвям: например, взять косинус от ста и сравнить результат с нулем. И если в процессе игры нас интересует не очень много величин, то их индикацию можно осуществить во время счета, удерживая каждую в регистре X несколькими стрелками вверх. Обе эти идеи не новы, вторую, например, я почерпнул из книги «Микрокалькуляторы в играх и задачах». Но их объединение может дать интересные игры. Сначала я написал программу «Посадка на Луну». Играю

щий вводит силу тяги, а машинка рассчитывает, сколько остается топлива, какова высота лунолета, его ускорение, скорость, причем делает это непрерывно, высвечивая изменения высоты и скорости корабля через две секунды, пока играющий не захочет изменить положение дел, переключит Р—ГРД—Г и введет новую силу тяги. Потом я написал программу «Автомобиль», где машинка работает уже беспрерывно. Вы можете поворачивать направо, налево, ехать прямо, пока не попадаете в заданную точку, где машинка сообщает о финише. Эти программы не привожу, так как они не очень удачны и КЭИ без труда сможет их воссоздать».

Что можно сказать? Спасибо за доверие, Дарий. Вот, например, программа «Лунолет-Д», реконструированная по твоему исчерпывающему описанию:

00. ИПА 01.-t 02. t 03. t 04.t 05. ИПВ 06. t 07 t OB.* 09 t 10.ИПД 11.Fx*o 12 55 15. ИПС 14.FcoS15. Fx.o 16 21 17. t 18. Fx2 19. RT 20. + 21.1 22.+ 25. Fx2 21. ИП0 25.x 26.- 27. F&x 28. «Е. 29. F*<o 30.55 31.+ 32.0 35. ПД 34. Fo 35. ИП0 36,- 37.+-38.ПВ39.+ 40.2 41.-Н42.ИПА45.+ 44.ПА 45. Kx<oC 46.2 47.x 48. x£ 49. ИПЬ 50. - 51 .x 52. ИПВ 55. Fx* 54. + 55. F-T 56. П1 57.0 58.ПА 59.+ 60./-/61. ПВ 62.1 63.5 64.+ 65.Fx<o 66. 69 67. F&x 68.(11 69. ИП1 70- 5 71.x 72. F10* 73. Fx2 74. Fx2 75. Fx2 76.t 77.ИПД 78.ИПВ79.С/п

Играть в эту игру чрезвычайно просто. В регистр 0 вводится ускорение силы тяжести на планете в м/с (лучше задавать его целым числом), в регистр Д — начальный запас топлива в кг, в регистр А — начальная высота в м, в регистр В — начальная вертикальная скорость в м/с (знак «минус» соответствует снижению). В регистр С закладываем число 100. «Рычагом управления» служит переключатель Р-—Г. Позиция Г соответствует выключению двигателя, промежуточное положение (ГРД) — малой тяге, Р — полной. Малая тяга в точности уравновешивает силу гравитации, а полная в четыре раза больше. Расход топлива численно равен реактивному ускорению.

Игра начинается командой В/О С/П. На индикаторе мерцает текущая высота полета (это обеспечивают команды 00— 04), затем ее сменяет скорость (05— 09), на мгновение проблескивает наличный запас топлива (10), и начинаются вычисления. Прежде всего производится проверка, не опустели ли баки (11 —

12). Если да, то ракетный блок пропускается, и управление передается сразу на адрес 35, в блок расчета новых скорости и высоты полета. Если же топливо еще есть, фрагмент 13—20 анализирует положение переключателя Р—Г: если тот установлен в позицию Р, на выходе блока имеем 1, если в позицию Г, то —1, промежуточная же позиция дает 0 (кстати, владельцы МК-61 и МК-52 могут заменить шесть команд 15—20 од-ной-единственной КЗН). Затем на основании полученной информации ПМК определяет реактивное ускорение и расход топлива, новые скорость и высоту полета. Делается это примерно как и в предшествовавших космических программах, причем шаг во времени взят равным одной секунде. При анализе программы надо помнить, что в верхних регистрах стека находятся скорость и топливо, введенные туда командами 05— 10.

Команда по адресу 45 сравнивает новую высоту полета с нулем. Если высота положительна (еще летим), то управление передается на адрес 00, и все повторяется. Полный цикл вычислений занимает секунд 15, а при пустых баках— еще меньше. Если же высота отрицательна, задействуется блок прилунения (46—79). Сначала определяется посадочная скорость (46—61), затем она анализируется ■ с помощью «сверхчисел». При скорости, не превышающей 2,5 м/с (посадка на «отлично»), она просто выводится на индикатор и вычисления останавливаются. Если скорость посадки лежит в диапазоне 2,5— 5 м/с («хорошо»), на индикаторе появляется ЕГГОГ. Нажимаем C/П, на индикаторе — скорость. В обоих случаях в регистр У выводится оставшийся запас топлива. При дальнейшем увеличении посадочной скорости ПМК выдает ЗГГОГа: его надо сбросить (Сх), а скорость и топливо смотреть в соответствующих регистрах (ИПВ и ИПД). Затем наступает очередь серьезных аварийных ситуаций. При прилунении со скоростью 7,5—10 м/с на индикаторе появляется испорченный фрагмент программы; «ремонт» корабля в этом случае можно произвести по методике, изложенной в № 3 за этот год: ЕПРГ ШГ влево Сх C/П FABT ЕПРГ ШГ влево ШГ влево, после чего вписать две команды вместо Сх C/П, перейти в режим АВТ и делать следующую попытку. Очень «коварно» ведет себя ПМК, если скорость лежит в диапазоне 10—