Пи-чо

Вверх по лестнице, бегущей в бок

Суть игры: имеется цилиндр — игровое поле. Его высота — 4 яруса, длина по окружности — 9 клеточек. Вот его развёртка:

По каждому ярусу цилиндра слева направо бегут квадратные ячейки. Поскольку это цилиндр, то за координатой 9 следует 1. В начале игры на 1-м ярусе в квадратике сидит человечек. Задача играющего — вывести его на крышу цилиндра (или, что то же самое, на 5-й ярус). Для этого нужно его переправить сначала на 2-й ярус, затем на 3-й и 4-й. У каждой ячейки своя скорость. Управляя этими скоростями (каким образом, будет рассказано ниже), надо совместить координату квадратика 1-го яруса с координатой 2-го, тогда человечек поднимется на ярус выше. Но дальше задача усложняется: приходится следить, чтобы координата человечка не совпала с координатой ячейки на одном из предыдущих ярусов. Если такое происходит, человечек «проваливается» до самого нижнего яруса из тех, где случилось совпадение.

Распределение регистров

Данные пользователя:

Служебные (используются для нужд самой программы):

Неиспользуемые:

Игровой процесс

На каждом шаге на индикаторе высвечиваются одновременно скорости всех ячеек и их координаты, в #Y и #a располагается номер яруса, на котором находится человечек.

Теперь об управлении скоростями ячеек. Скорость квадратика — это целое число, показывающее, на сколько клеточек он переместится вправо, если её не менять, за один ход. Управление производится так: вы набираете номер квадратика (яруса), а ПМК перераспределяет соответствующую скорость, разлагая её на единички и прибавляя к скоростям квадратиков на следующих ярусах, причём после 4-го яруса снова идёт 1-й.

В результате такой операции каждый квадратик приобретает новую скорость и новую координату — путём прибавления его скорости к прежней координате. Такой способ задания скоростей очень удобен. Ввод исходных данных предельно прост: нажав всего одну кнопку, мы изменяем координаты сразу всех четырёх квадратиков. Сумма их скоростей, как легко видеть, в процессе игры остаётся постоянной, поэтому, выбирая скорости в начале игры, можно варьировать степень сложности стоя́щей перед нами задачи. Информация после каждого хода выводится на индикатор в виде восьмиразрядного числа, разделённого десятичной точкой: cлева от неё последовательно располагаются скорости квадратиков, справа — их координаты. А в #Y и #a, как уже упоминалось, выводится номер яруса, которого достиг человечек. Если вам удастся на 4-м ярусе совместить координату с девяткой, то человечек через обозначенный на рисунке люк выбирается на крышу, и в #Y и #a оказывается число 5.

Если в качестве номера квадратика указать 0, значения скоростей квадратиков останутся прежними, а координаты человечка соответственно пересчитаются.

Если указать номер квадратика с нулевой скоростью, хода не произойдёт: на экране появятся те же самые скорости и координаты квадратиков.

Если индикация случайно стёрлась, её легко можно восстановить, нажав В/О С/П.

Пример игры

Каждая партия начинается с занесения:

2 X→П1 X→П2 X→П3 X→П4 X→П5 X→П6 X→П7 X→П8 (все начальные скорости и координаты квадратиков равны 2).

1 X→Пa — человечек находится на 1-м ярусе.

Нажимаемые клавиши #X #Y, #a Объяснение
0 В/О С/П 2222.2222 1 Начальные скорости (до точки) и координаты квадратиков (после точки) равны 2; человечек находится на 1-м ярусе.
1 2 С/П 2033.4255 1 Перераспределили скорость 2-го квадратика: теперь она равна 0, а скорости 3-го и 4-го увеличились на 1.
2 1 С/П 143.4398 1 Перераспределили скорость 1-го квадратика: теперь она равна 0 (начальные нули в числе не показываются).
3 3 С/П 1214.5513 2 Перераспределили скорость 3-го квадратика. Координаты 1-го и 2-го квадратиков совпали, и человечек поднялся на 2-й ярус.

Исходный код

Существенно оптимизирован по сравнению с оригинальным:

00. П→Xa	01. П→X8	02. 8		03. X→П0	04. CX		05. ВП		06. 1		07. ÷		08. КП→X0	09. +
10. П→X0	11. FL0		12. 03		13. ВП		14. 3		15. ×		16. С/П		17. Fx≠0	18. 45		19. X→П9
20. КП→X9	21. Кx≠00	22. X→П0	23. CX		24. КX→П9	25. 4		26. П→X9	27. −		28. Fx≠0	29. 31
30. FВx		31. 1		32. +		33. X→П9	34. 9		35. КП→X9	36. 1		37. +		38. КX→П9	39. −
40. Fx<0	41. 43		42. С/П		43. FL0		44. 25		45. 5		46. X→П0	47. 3		48. +		49. X→П9
50. 9		51. В↑		52. КП→X0	53. /−/		54. КП→X9	55. −		56. +		57. Fx≥0	58. 56		59. −
60. КX→П9	61. П→X0	62. FL0		63. 46		64. П→Xa	65. 5		66. +		67. X→П0	68. КП→X0	69. В↑
70. П→Xa	71. 1		72. +		73. X→П0	74. F⟳		75. КП→X9	76. −		77. Fx=0	78. 90		79. +
80. П→Xa	81. П→X9	82. 4		83. −		84. −		85. Fx≠0	86. 90		87. FВx		88. X→Пa	89. В/О
90. F⟳		91. П→X9	92. 1		93. +		94. X→П9	95. FLO		96. 74		97. КБП0

Пояснения:

00…16 — формирование и вывод скоростей и координат квадратиков в #X и номера яруса в #Y.

17…18 — если введён 0, пропускается последующий блок пересчёта скоростей, и управление переходит сразу к блоку пересчёта координат.

19…44 — блок пересчёта скоростей; проверка на 40…41 делает дополнительный останов (42) с выводом отрицательного числа, если скорость очередного квадратика превышает 9.

45…63 — блок пересчёта координат.

64…96 — проверка, не совпали ли координаты квадратика с человечком с координатами другого квадратика: последовательно проверяются ярусы с 1-го по следующий за текущим, причём текущий обходится дополнительной проверкой (80…86). Если совпали, то номер совпавшего яруса становится текущим — записывается в #a (87…88), и управление переходит на шаг 01 (89. В/О).

Если же совпадений не обнаружено, то после прохода всех проверяемых ярусов управление переходит на шаг 00 (97. КПБ0: в #0 после отработки цикла (95…96) остаётся 1, при косвенном обращении модифицирующаяся в 0).

Источник: журнал «Техника — молодёжи», № 7 / 1988, стр. 15.

Автор: А. В. Раков (Горький, нынешний Нижний Новгород).

Переработал, перевёл в формат эмулятора и составил эту инструкцию: Адам Лаврик — 2026-06-06,13.