Техника - молодёжи 1988-01, страница 65

Техника - молодёжи 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) нетрудно их сократить на шесть команд. В результате и здесь появился Сфинкс, который «простреливает» широту на единичку выше Южного Оракула. Вот этот вариант:

00%

17 П5

МПС

51.ИП5

66.-

85 +

ШИПА

18. й

55 ПО

52FE.K

69.F»o 86F*-o

02.Fcas

19. га

36ИП4

55"

70.75

87.90

0S.Fiko

20КБП7

57. ИП2

54.Fw.o

71.ИПВ

88. ИПД

0412

21./-/

5В.+

55.56

72. (15

89. C/n

0Ш5

22. П2

5а П4

56 ИПД

75.ИП6

90.ИП4

06 Fa-о

25.0

4а ищ

57. Vn

74.ИП5

91. КПП8

07.22

24 П5

41.ИП5

56. К -

75-

92ИП5

1ЖИП2

25 ао

42.+

59. ИПЗ

76.F.-C

95. t

09Н

26.56

45. П5

60 FB.

77.84

94. t

МБП

27.FL1

44 +

61.1

78 5

95.t

11.17

28.51

4iF*'

62-

79.ИЛ4

96.t

12К**ю7

29. ИПД

46. FГ

65-

80.-

97. t

15.ИП5

30. С/п

47ИПС

64. F»-o

BI.Fx-o

98. Vo

14. Fx-о

Л.ИП1

48.-

65.75

62.90

15.21

52.ИЛ9

49.Fkvo бЬИЛб

«5.<Уп

16.ИП2

35*

50.59

67.ИЛ4

©4.1

Все исходные данные прежние, кроме содержимого регистров 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