<<< «ТМ» 1986 №7 | «Техника-молодежи» 1986 №8, с.44-47 | «ТМ» 1986 №9 >>> |
КЛУБ ЭЛЕКТРОННЫХ ИГР
ПОЕДИНОК
С РОБОТОМ
«Колоссальные захваты приближались... вот они загородили все небо... сомкнулись на корпусе «Кон-Тики»... И вдруг... («ТМ» № 11 за 1985 г.)
Несомненно, многие наши читатели, рискнувшие выполнить задание по облету станции «ЮГ» в легоньком скафандре, с миниатюрным ракетным двигателем за спиной, на собственном горьком опыте убедились в дурном нраве механического чудовища, охраняющего станцию от «непрошеных гостей». Те, кого интересует конструкция этого не особо вежливого автомата, ошибочно принятого М. Коршуновым за «причальный манипулятор», могут детально познакомиться с ней в разделе «Алгоритмическая гимнастика». Пользуясь случаем, напомним, что первым в истории космонавтики «всамделишным» причальным манипулятором, как известно, оборудована советская орбитальная станция «Мир».
Страж станции «ЮГ», как помнят читатели, не был единственным роботом, в поединок с которым вступили отважные путешественники. До него был кофейный «однорукий бандит», после — «робот-бюрократ», в перепалке с которым А. Перепелкин невольно заложил фундамент грядущей победы. Но некоторые читатели, в частности Г. Горовой из Керчи, не без основания подозревают, что на протяжении всего героического перелета в кабине «Кон-Тики» незримо присутствовал и третий участник — бортовой компьютер. И не может быть, чтобы А. Перепелкин и М. Коршунов не сражались бы с ним постоянно. Разумеется, на нашем излюбленном поприще электронных игр.
Следует честно признаться: так оно и было. Наиболее тяжкие случаи злоупотреблений азартными играми наблюдались на участке «точка либрации — Земля», а также после приводнения, когда свободного времени у наших героев было хоть отбавляй. И сразу откроем второй секрет: хотя бортовая игротека «Кон-Тики» была весьма обширна, наибольшей популярностью среди экипажа пользовались шахматы, шашки, «уголки» и прочие традиционные игры на стандартной квадратной доске 8×8.
Но какая связь между ними и нашей скромной «Электроникой»?
«Недавно у меня возник вопрос, и я хотел бы проконсультироваться с вами, — пишет В. Ревуцкий из Киева. — Можно ли использовать микрокалькуляторы «Электроника Б3-34», «Электроника МК-54», «Электроника МК-56» для игры в шахматы или решения некоторых шахматных задач. Если можно, то напечатайте, пожалуйста, программу для этого».
Как видим, у отдельных читателей возникла не вполне обоснованная вера во всемогущество ПМК. Какие там шахматы! Какие шашки! Вообще любая стратегическая игра на шахматной доске покажется абсурдом почти всякому, кто хоть раз в жизни видел Б3-34 (МК-54). Одних только клеток 64 — разве их все упомнишь? А фигуры? А осмысленную стратегию как задавать? Случайным образом? Пиши пропало, ходи как попало — где наша не пропадала?! Так, что ли?
Но не будем горячиться. Заглянем лучше еще в одно письмо — от нашего постоянного корреспондента, студента-первокурсника Дмитрия Кайкова из Белгорода.
«А теперь я хочу рассказать вам о еще одной своей «мыслящей» программе. Есть такая игра — тремя или четырьмя шашками надо прижать одну шашку противника к краю шахматной доски, чтобы та не могла сделать ни одного хода («волки» ловят «серенького козлика»). «Козлик» (белая шашка, которой «руководит» калькулятор) может ходить как вперед, так и назад (по черным клеткам), а «волки» (их направляет человек) только вперед. Ни «есть», ни перепрыгивать через шашки никому нельзя. Калькулятор стремится прорваться сквозь строй «волков», а те как уже было сказано, стремятся поймать его в ловушку.
00.КПП7 01.КИП8 02.5 03.0 04.- 05.Fx<0 О6.19
07.КППА 08.КИП8 09.2 10.0 11.- 12.Fx≥0 13.28
14.КППВ 15.КППС 16.КППД 17.ИП9 18.Кх<07
19.КППВ 20.КИП8 21.8 22.0 23.- 24.Fx<0 25.16
26.КППА 27.КППД 28.КППС 29.БП 30.17 31.КИП8
32.1 33.1 34.+ 35.ИП9 36.Fx<0 37.41 38.XY
39.П5(6) 40.XY 41.XY 42.4(5) 43.П0 44.XY
45.↑ 46.↑ 47.КИП↑ 48.- 49.Fx≠0 50.97 51.Fo
52.FL0 53.47 54.5(6) 55.П8 56.ИП9 57.1 58.+
59.П9 60.Fx≠0 61.01 62.ИП5(6) 63.П4(5)
64.С/П 65.П9 66.С/П 67.КП9 68.КБП0 69.КИП8
70.9 71.- 72.БП 73.35 74.КИП8 75.9 76.+
77.ИП9 78.Fх<0 79.41 80.Fo 81.2 82./-/
83.П9 84.БП 85.38 86.КИП8 87.1 88.1 89.-
90.БП 91.77 92.4(5) 93.П8 94.1 95./-/ 96.П9
97.В/О
Вот программа этой игры на языке Б3-34. Для начала пронумеруем черные шашки (их три) и вместо букв на доске (по горизонтали) поставим цифры, как на рисунке. Теперь каждой клетке соответствует двузначное число: первая цифра — это координата по горизонтали, вторая — по вертикали. Пусть в начальной позиции «волки» занимают клетки 28, 48 и 68 (это задается командой 28 П1 48 П2 68 П3), а «козлик» — позицию 31 (31 П4). В ходе игры в этих же регистрах будут храниться текущие координаты шашек. Перед игрой надо в некоторые регистры записать адреса переходов: 92 П7 31 ПА 69 ПВ 74 ПС 86 ПД.
«Козлик» ходит первый. Нажимаем В/О С/П. Через 35 с на индикаторе загорается 42 — ПМК двинул свою шашку на это поле. Теперь наш ход. Для этого набираем номер шашки, которой хотим пойти (скажем, 1), С/П, номер клетки, куда идем (допустим, 37), и снова С/П. Калькулятор фиксирует этот ход, делает ответный, и все повторяется. Программа может использоваться и для четырех «волков». Для этого достаточно записать по адресам 39, 42, 54, 62, 63 и 92 цифры, данные в скобках. Координаты «волков» в таком варианте хранятся в регистрах 1–4, «козлика» — в регистре 5.
Надо сказать, что из-за малого объема программной памяти калькулятор просматривает ситуацию максимум на два хода вперед, поэтому иногда действует «не очень логично». Но тем не менее даже я сам у него не выиграл ни разу. (Очевидно, в варианте 3:1; с четырьмя «волками» выиграть нетрудно. — М. П.) Программа работает следующим образом: сделано так, что белая шашка стремится быть всегда у осевой линии поля (между 4-й и 5-й вертикалями). Сначала определяется, на какой половине поля находится «козлик» (адреса 01–06). Если слева — управление передается на участок программы с начальным адресом 07, если справа — с адресом 19.
Да, до этого в регистр 8 автоматически записывается четверка, в регистр 9 — единица с минусом (адреса 00, 92–97). Для производства ходов вправо-вперед, влево-вперед, вправо-назад и влево-назад служат подпрограммы ППА, ППВ, ППС и ППД соответственно (в регистрах А, В, С и Д хранятся адреса их первых команд). В приведенном примере первой срабатывает ППА: калькулятор «мысленно» делает ход вправо-вперед и заносит результат в регистр 5. Начиная с адреса 42, производится опрос координат «волков» и «козлика» (регистры 4–1). Если позиция одного из них совпадает с содержимым регистра 5, то такой ход невозможен, сработает В/О, и калькулятор с помощью следующей подпрограммы примется за обдумывание другого хода. Если же путь свободен, то произойдет перекодировка регистра 8 и 9 (фрагмент 54–59), затем произойдет переход на адрес 01.
Консультант раздела —
Герой Советского Союза,
летчик-космонавт СССР
Ю. Н. ГЛАЗКОВ
Теперь «Электроника» начинает думать дальше: а не идет ли она в ловушку? Для этого производится проверка — есть ли хотя бы один выход из того положения, в которое она попадет, если сделает намеченный ход. Происходит это по тому же алгоритму. Если найдется хоть одна соседняя пустая клетка, куда «козлик» мог бы в случае чего выскользнуть, то ПМК пойдет на поле, координаты которого записаны в регистре 5 (фрагмент 56–59 и 60–64). Теперь, кстати, ясно, зачем проверяются координаты самого «козлика» — ведь одну из возможных клеток после второго хода занимает он сам. Если же пустой клетки не окажется, то в регистры 8 и 9 снова занесутся исходные числа, и калькулятор примется за другую клетку.
В программе есть ограничивающие (не знаю, как их еще назвать) «участки» по адресам 08–13 и 20–25, которые следят, чтобы «козлик» не вышел за правую и левую границы поля.
Если ПМК не может пойти вперед, то наступает очередь подпрограмм ППС (начальный адрес 74) и ППД (86). Теперь «Электроника» пойдет в клетку сразу же, если только та пуста. Это обеспечивает фрагмент 77–85
Время работы 35–150 с.».
Программа Д. Кайкова (играть с ней, кстати, весьма интересно: создается четкое впечатление, что действиями «козлика» руководит вдумчивый, осторожный противник), пожалуй, посложнее тех, с которыми мы имели дело раньше. В основном это связано с широким использованием косвенной адресации. В основном она используется для экономии программной памяти: например, команда КППА эквивалентна паре ПП 31 (в регистре А хранится число 31). Команда КБП0, записанная по адресу 68, эквивалентна БП 00: к тому моменту, когда управление переходит к ней, в регистре 0 находится единичка, а при косвенном обращении она модифицируется: 1 - 1 = 0, закон природы! Наконец, по адресу 47 записана «нештатная» (для Б3-34) команда КИПЕ: действует она в данной ситуации точно так же, как и в программе «Мультфильм» (разъяснения по этому поводу см. «ТМ» № 4 с. г.).
Кстати говоря, именно из-за этой команды программа Д. Кайкова в приведенном виде непригодна для непосредственного использования на ПМК «Электроника МК-61» — связь регистров 0 и Е в этой модели, как мы знаем, разорвана. Конечно, возможности МК-61 гораздо больше, но... «Обращаемся к вам в связи с возникшими трудностями в работе с МК-61, — пишут, например, студенты Р. Марьянов и А. Яланский из Запорожья. — В данной модели введен регистр Е, что затрудняет использование для него программ, составленных для предыдущих моделей. В частности, работая с программой «Городки» («Наука и жизнь» № 4 с. г.), мы столкнулись с фактом отказа работы калькулятора. (Далее в письме приводится фрагмент программы. — М. П.) Нам кажется, что ошибка допускается на шагах 02–04. Мы воспользовались советом вашего журнала по установлению искусственной связи регистров Е и 0, но ожидаемых результатов не получили».
Напомним: в нашей рекомендации говорилось, что установление такой связи требует минимум двух команд ИП0 ПЕ. В некоторых случаях этого действительно достаточно. Но чаще для нормальной работы требуется еще и восстановить стек. Как правило, для этого достаточно команды круговой передачи (код 25), вписанной сразу же после двух приведенных. А иногда (как в программе Д. Кайкова) можно обойтись и командой XY.
К счастью, в предлагаемой игре имеются «внутренние резервы»; иными словами, программу можно сократить на несколько команд. Это позволяет дать вариант, одинаково пригодный как для Б3-34, так и для МК-61. Нужно заменить участок по адресам 45–66 на следующий:
45.ИП0 46.ПЕ 47.XY 48.КИПЕ
49.- 50.Fx≠0 51.97 52.FВх 53.+
54.FL0 55.45 56.5(6) 57.П8 58.ИП9
59.1 60.+ 61.П9 62.Кx≠0Е
63.ИП5(6) 64.П4(5) 65.С/П 66.П9
Изменяется только способ ввода очередного хода. Теперь нужно набрать номер шашки, затем ПП и номер поля. Впрочем, такой ввод хорошо знаком нам по прошлым программам. Владельцы Б3-34 (МК-54) должны помнить, что буква Е по адресам 46, 48, 62 соответствует на их клавиатуре стрелке вверх. Цифры в скобках, как и раньше, дают «вариант 4 волков».
Михаил ПУХОВ
АЛГОРИТМИЧЕСКАЯ ГИМНАСТИКА
ПОЕЗДКА НА «ЮГ»
Прыжок М. Коршунова и облет станции «ЮГ» с ранцевым двигателем (рисунки Е. Катышева по эскизам участника перелета В. Ладохина).
Речь пойдет о путешествии не на юг, а на «ЮГ» — орбитальную станцию «Юрий Гагарин». Многие члены КЭИ с помощью программируемого микрокалькулятора и номеров нашего журнала смогли побывать на фантастическом спутнике Луны и не только любовались великолепным 600-метровым прыжком Лунного Коршуна, но и сами попробовали заняться космической «акробатикой». Однако сначала требовалось причалить к станции, а эта операция не менее сложна, чем посадка.
Поэтому сегодня мы рассмотрим блок-схему программы ОС-2, которая моделирует маневры космического аппарата в окрестности орбитальной станции цилиндрической формы, причем продольная ось станции совпадает с местной вертикалью, а посадочные площадки оборудованы на торцах цилиндра.
Тем, кто впервые занимается алгоритмической гимнастикой, советуем предварительно ознакомиться с предыдущими выпусками (см. «ТМ» № 5–7 за этот год). Ну а наши постоянные читатели легко разберутся в структуре программы.
Прежде всего мы видим блоки ввода-вывода. Их назначение понятно без комментариев. Затем следуют также знакомые по предыдущим выпускам вычислительные блоки, где определяется реактивное ускорение и подсчитываются значения текущих координат после каждого маневра. Напомним, что в нашей задаче система координат связана со станцией, причем ось Y направлена по местной вертикали, а ось X — вдоль касательной к траектории станции (см. рисунок). Так как посадочные площадки расположены на основаниях цилиндра, то условие причаливания имеет вид |y|=R, а |x|<r. (При этом, естественно, нельзя забывать о скорости в момент рандеву — ведь от нее зависит «мягкость» причаливания.)
Как и на прошлых занятиях, мы встречаемся также с блоками проверок и коррекции. Они-то и составляют «изюминку» игровых программ, поэтому, как обычно, их работу мы рассмотрим поподробнее Обычно при последнем маневре не удается абсолютно точно провести стыковку. Чаще всего вычисленные значения координат лежат внутри станции. Авария? Нет, на индикаторе вы увидите вовсе не сигнал ошибки, наш бортовой компьютер скорректирует действия пилотов. Действует он при этом следующим образом: установив с помощью проверок значений координат, что лунолет «протаранил» станцию, калькулятор начинает извлекать его оттуда и превращается в своеобразную «машину времени». Вычисляется продолжительность «шага назад», и аппарат возвращается по своей траектории. Подобным же образом бортовой вычислитель действует и в других программах, но сегодня мы познакомимся с новым алгоритмом.
Случай первый — мы подлетели к станции с ее торца, но в результате последнего маневра аппарат очутился в «ЮГе». Что теперь делает ПМК?
Прежде всего он определяет расстояние до основания цилиндра, затем делит его на скорость аппарата в конечной точке и тем самым находит время «шага назад». Затем, как обычно, лунолет возвращается по прежней траектории. Геометрический смысл алгоритма показан на рисунке — точка, в которой оказался космический корабль, принимается за центр, и проводится окружность, радиус которой как раз равен расстоянию до торца. Пересечение окружности с траекторией — новое положение аппарата. Так за несколько шагов бортовой компьютер извлекает «Кон-Тики» на посадочную площадку.
Если же мы подлетели к станции сбоку, то применение того же самого способа коррекции дает совсем другой результат. Обратимся к рисунку. Легко видеть, что точка пересечения окружности с траекторией теперь лежит вне станции, корабль как бы отброшен назад от станции. Именно с этим эффектом «метеорной защиты» столкнулся героический экипаж «Кон-Тики». Надеемся, что нашим читателям при разработке собственных игр не составит труда смоделировать «силовое поле», столь любимое писателями-фантастами.
И несколько слов о блоке вычисления переменных. Отметим, что в нем использованы не точные, как в программе «Лунолет», решения уравнений движения, а приближенные.
Они получены с помощью так называемой линеаризации. О том, что это такое, мы поговорим в одном из ближайших выпусков рубрики.
Сергей ВОЛКОВ,
инженер
<<< «ТМ» 1986 №7 | «Техника-молодежи» 1986 №8, с.44-47 |