Техника - молодёжи 1988-01, страница 65Вот комплект исходных данных: 31 П7 99 ГШ 10 П9 П1 ! ПЗ 100 ПО ПА ПС 7 /—/ П6 40 /—/ ПВ 39 /—/ ПЕ Сх П4 П5 П2 Ч- ВП ПД Теперь нужно прочистить стек (нажать 0 и семь раз стрелку вверх), затем В/О С/П. Рассмотрим назначение каждого блока. 00—30 — управление поворотами при движении; 31—41 —управление движением Пустоты; 42—49 — управление вашим движением по территории страны; 50—63 — проверка на попадание в Пустоту и к Г моргу; 64—77 — проверка на попадание в зону, патрулируемую Фалькором; 78—84 — проверка иа попадание в зону, простреливаемую Сфинксом; 85—95 — проверка на попадание к Южному Оракулу; 96—А5 — индикация ваших текущих координат и возврат на начало программы. Надеемся, что существенную помощь в странствиях вам окажут разработанные Володей Шило карты страны Фантазии. В первоиачальном варианте программы для Б3-34 Сфиикс отсутствовал, для соответствующего блока в памяти не хватило места. Однако, просматривая перед отправкой в редакцию тексты программ, мы заметили, что за счет более рациональной организации блока (00—30) нетрудно их сократить на шесть команд. В результате и здесь появился Сфинкс, который «простреливает» широту на единичку выше Южного Оракула. Вот этот вариант:
Все исходные данные прежние, кроме содержимого регистров 7 и 8 : 25 П7 93 П8. Регистр Е, естественно, не задействован — широта Сфинкса задается программно. Правила игры тоже ие меняются. Аналогичное сокращение можно сделать и на МК-52, разместив в освободившихся ячейках какой-нибудь новый блок. Сконструировать его вам поможет ваша фантазия. Владимир TAJ1AJ1AEB Киев КАК СОКРАТИТЬ ПРОГРАММУ? По мнению администрации КЭИ, игра В. Талалаева и В. Шило заслуживает самой высокой оценки. Однако не будем забывать нигде до сих пор четко ие сформулированный девиз нашего клуба: «Развлекая — обучать». Рекомендуем самостоятельно разобраться в том, каким образом авторам удалось высвободить шесть шагов программной памяти (а это очеиь много!) в начале программы. Освобождающиеся ячейки в игровых программах, как правило, удается использовать либо для улучшения игровых качеств, либо для повышения сервиса. Прежде чем продемонстрировать некоторые, в общем-то, стандартные приемы, с помощью которых можно подвергнуть произведение молодых киевлян дальнейшему сокращению (а это позволит обогатить фауну сказочной страны еще какими-нибудь чудовищами), обратим внимание, что возврат на начало осуществляется здесь командой В/О. При таком использовании, как мы знаем, стек подпрограмм должен быть пуст. А как быть, если он (скажем, в результате работы с предыдущей программой) заполнен какими-нибудь адресами? В свое время (№ 3 за 1987 год) на страничках КЭИ приводился довольно громоздкий метод очистки стека подпрограмм. Но жизнь не стоит на месте. Вот какую процедуру придумал наш постоянный корреспондент Владимир Иванов из Москвы: нажать Сх, стрелку вверх, затем ВП Fx2 Сх ХУ Сх. Суть способа — создание и последующий сброс ЗГГОГа с нулевой маитиссой (если перед сбросом заслать его в какой-нибудь регистр и затем расшифровать, убедимся, что мантисса действительно равиа нулю). Легко видеть, что по сравнению с ранее опубликованным способ В. Иванова дает экономию минимум в четыре нажатия клавиш. А теперь займемся программой В. Талалаева и В. Шило. Надо сказать, что, как правило, кое-какие последовательности команд без всякого ущерба можно записывать по-разному. Полезно бывает перепробовать все мыслимые варианты. Нетрудно заметить, что в уже сокращенной авторами для Б3-34 фрагменты (12—15) и (16—20) можно безболезненно переставить, сменив одновременно адреса переходов. В резуль тате фрагмент (03— 20) примет вид: 03. Fx<004.17... 10. БП 11.13 12.ИП2 13.ПЗ 14 0 15.П2 16.КБП7 17.Кх#4)7 18. ИПЗ 19-Fx^O 20.12 Остальные команды, в том числе и пропущенные, остаются прежними. Посмотрим внимательнее иа фрагмент (16—17). Что будет, если вместо 16.КБП7 ввести пустую команду 16.КНОП? Очевидно, программа будет работать по-прежнему: ведь при нуле в регистре X (а он введен туда командой 14.0), команда 17,Кх=^07 передаст управление на адрес 25, хранящийся в регистре 7, то есть исполнит функцию пропущенной КБП7. Теперь можно «подтянуть» всю остальную программу, но мы поступим по-другому: заменим (16—17) на 16 Fx=?t0 17.25 и одновре меино впишем новый адрес а команду условного перехода (03—04) —04.16. Итак, лишь за счет более рациональной организации освобожден регистр 7, ои нам пригодится в дальнейшем. Перейдем к фрагменту (32—33). Здесь выполняется умножение на 10 — именно это число хранится в регистре 9, а больше он нигде не используется Естественно решение — записать 32 ВП 33.1. Еще один регистр к нашим услугам. Обратим внимание на однотипные блоки (54—57) и (86—89). В обоих случаях при выполнении условия исполняется ИПД С/П, а при невыполнении управление передается на следующую по порядку команду (58.К — либо 90.ИП4). Но вызов «пустышки» при проигрыше производится и по адресам 29—30. Записав 29 в освобожденный регистр 9, получаем возможность заменить первый из указанных фрагментов командой Кх<09. а вто рой — Кх=?^=09. «Единым махом» программа сокращена на 6 команд. Заменив же прямые операторы условных переходов на старых адресах 64—65 и 69—70 косвенными (с использованием регистра 7), экономим еще две, итого восемь. Далее, легко исключить одну-две команды, записывая в регистр Д вместо «пустышки» настоящую Тьму или, допустим, ЗГГОГа (в этом случае пропадет нужда в С/П, кроме того, можно использовать «сверхчисло» и для косвенного перехода, как неодиократио делалось в КЭИ)... Словом, идея понятна. А теперь попытайтесь сами улучшить «Бесконечную историю» за счет введения каких-нибудь новых игровых эффектов. Желаем вам в этом успеха! 61 |