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

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

путъе, выбирает то или иное направление дальнейшей жизни. Выбор определит и его спутников — друзей и недругов, жизненный путь которых будет моделировать программа. Их поведение и логика событий частично случайны, а частично определяются принимаемыми решениями. А цель игры — прожить

гармоничную и полнокровную жизнь. Каждый этап оценивается по критериям личного счастья, деловой продуктивности, общественного добра.

Каталог биографических компьютерных игр далеко не исчерпан. Будем рады, если эта статья побудит вас к собственным разработкам.

Укрощение Мустанга

Дорогая редакция! Пишет вам ученик 9-го класса из Ленинграда Н. Ромашов. В № 11 за 1987 год была опубликована программа «Мустанг», которая годилась только для МК-52 и МК-61. Игра заинтересовала меня, и я решил переложить ее на свой МК-54. Приведенная ниже программа обладает всеми достоинствами своей предшественницы. Кроме того, ПМК в случае поражения не зацикливается, а выводит видеосообщение Е89. Игровое поле расширено до размеров 8Х 8. Недостаток программы — она годится только для МК-54 и БЗ-34.

оо.%

17. +

34 ПО

51.ЕЕ,

66 - 85./-/

0U

48.ИП4

55.9

52.Fx=o

69 КОС 86 ПА

02.ПС

49. -

56. БП

55. 54

70.ИПА 87. БП

03. ВП

20.-

57.41

54.ИП9

74. П9 88.74

04.4

24.Кх«.сА

56.0

55. НПО

72.8 89. ИПЬ

05 Кх*оЬ 22 ГО

59W10

56--

75.КППД 00. х

06 В

2S.1

4С1

57. ПП

74 4 84.ИП9

07.32

24-

41.1

58.99

75.КППД 92.+

08.-

25.KxwB

42.

50. 7

76.7 95. (19

Оа«х.оЬ 26.8

45. Fx1

60. *

77.КППД 04. Fx1

40.ИПС

21.-

44. FV~

64.+

78.2 95.F\T

44. КИПС

28.ККО&

45.1

62.КПС

79.КПП0 96. БП

42.FB*

29.^1

46 ПС

65. НПО

80. ИПА 97.04

45.F10"

30. ПА

47. ВП

64. ПП

84.Fwo

14.-5-

Я.с/„

48.Fx»o

65. АО

82.85

15. t

32. П9

49.54

66.7

85 «Щ

46 ИГМ

55.-

50 ПП

67.x

84С/П

После ввода программы в регистр В нужно занести число 0,1, в Д — сообщение Е89 (это одновременно и адрес перехода). В регистры 1—8 вводится план игрового поля по горизонталям в виде 8-значных чисел, состоящих из цифр 1 и 8.1 обозначает свободное поле, 8 — охотника, причем план горизонталей задается справа налево (скажем, полю gl соответствует 2-я цифра числа в регистре 1). После набора всех 8 цифр надо скомандовать ВП 1 и получившееся число занести в соответствующий регистр. fe регистр А вводятся координаты мустанга (первая — по вертикали). Ввод всех координат осуществляется через точку; для позиции на диаграмме имеем 5,4 ПА. В начале игры отдается дополнительная команда БП 32.

Ход задается так же, как и в предыдущей программе: (координате охотника, который ходит) ПП (координата поля, куда он ходит) С/П. Например,

1,7 ПП 2,6 С/П. Для изображенной позиции ПМК через 40 с ответит 6,2. В программе предусмотрен контроль правильности хода человека (охотники, напомню, ходят только по диагонали). В ответ на ход игрока ПМК выдает новые координаты мустанга или сообщение Е89.

abcdef gh

Знакомство с программой лучше начать с адреса 32. При ходе человека старые координаты охотника записываются в регистр 9, а разность между старыми и новыми — в регистр О (32—34). Далее располагается блок проверки правильности хода: проверяется делимость разности координат на 9 и 11. Фрагмент 50—51 передает управление на адрес F1 длинной побочной ветви, где задублированы команды по адресам 39—47, после чего срабатывает В/О, и управление передается на адрес 52.

Если проверка прошла благополучно, вступает в действие блок изменения игрового поля в соответствии с ходом человека (54—60, 00—13). Команды по адресам 57—58 и 64—65 передают управление на короткую побочную ветвь, где задублированы команды до адреса 13, после чего срабатывает В/О. В этой подпрограмме осуществляется выделение горизонтальной координаты охотника (01—04), занесение ее в регистр предыдущего результата (08), вызов плана горизонтали (11). Затем к этому числу прибавляется или отнима-

ется 7, умноженное на 10 в соответствующей степени (12—13, 59—61, 66—68), и полученный таким образом новый плаи горизонтали заносится в тот регистр, из которого был вызван старый (62, 69).

Весь остальной объем программной памяти занимает блок управления ходами мустанга с подпрограммой проверки его координат. К ним прибавляются последовательно 0,8,0,4,0,7,0,2 (мустанг делает ходы вперед). Если все попытки заканчиваются безрезультатно, то знак координат мустанга меняется (85—86). Теперь координаты мустанга уже отнимаются от перечисленных дробей, при этом получаются отрицательные числа, знак которых меняет фрагмент 94—95. Если же исчерпаны все возможности, то управление передается на адрес 83, и ПМК выдает сигнал о своем поражении.

Рассмотрим теперь, как работает подпрограмма проверки. После передачи управления на адрес 01 блок 01—04 выделяет вторую координату мустанга, которая сразу же подвергается проверке (05—09). Если она равна 0 или 9, то управление передается на адрес 00, срабатывает В/О, и начинается формирование очередных координат. Если проверка проходит успешно, то команда по адресу 10 вызывает в стек координаты мустанга. Затем они продвигаются до регистра Т и «цепляются» за конец стека. В блоке 11—14 план горизонтали делится на 10 в соответствующей степени. Легко видеть, что последняя цифра целой части получившегося числа кодирует ту клетку, куда собирается пойти ПМК. Фрагмент 15—21 выясняет, какая это цифра — 1 или 8,— с помощью ошибки округления. Если охотника в данной клетке нет, команда по адресу 22 вызывает координаты мустанга, и происходит проверка первой координаты (23— 28). Конечно, можно было проверить первую координату сначала, вынося этот фрагмент в конец программы, но порядок проверки ничего не меняет. Если все верно, то команда по адресу 29 снова выдает координаты мустанга, они записываются в регистр А, и программа останавливается — ПМК сделал ход.

От редакции. Публикуя сообщение Н. Ромашова, мы хотели бы обратить внимание читателей на использованный в его программе очень интересный прием: расположение подпрограмм в побочных ветвях памяти. Одна-един-ственная команда В/О на адресе 00 может, таким образом, обеспечивать возврат параллельно из трех совершенно различных подпрограмм. Наш и без того богатый арсенал нестандартных приемов пополнился еше одним, и это радует. Кстати, в присланной программе остались неиспользованные резервы: первое, что приходит в голову,— это организовать на адресах 88—89 кодово-адресную связку (ведь если заменить 87.БП 88.71 на 87.БП 88.ИПВ, программа будет работать ничуть не хуже).