Мат ладьёй

Шахматный эндшпиль: ПМК, играя белыми королём и ладьёй ставит мат чёрному королю под управлением человека.

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

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

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

Примечание: в файле .pmk для эмулятора регистры #89, #ae уже заполнены.

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

Положение переключателя Р–ГРД–Г произвольное.

Партия начинается со ввода координат фигур в #16 (см. выше) и команд В/О С/П.

ПМК на каждом ходу выдаёт информацию одним из следующих способов:

В ответ игрок вводит двузначную координату (столбец и ряд) поля, на которое ходит чёрный король, и нажимает С/П, передавая ход калькулятору.

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

Пример игры

Белые:

Кр a8 — 1 X→П 3 8 X→П 4

Л h8 — 8 X→П 5 X→П 6

Чёрные:

Кр d5 — 4 X→П 1 5 X→П 2

В/О С/П — Г. Поворачиваем доску на 90° по часовой стрелке и вводим новые координаты фигур:

Белые:

Кр h8 — 8 X→П 3 X→П 4

Л h1 — 8 X→П 5 1 X→П 6

Чёрные:

Кр e5 — 5 X→П 1 X→П 2

В/О С/П — Г. Поворачиваем доску на 90° по часовой стрелке и вводим новые координаты фигур:

Белые:

Кр h1 — 8 X→П 3 1 X→П 4;

Л a1 — 1 X→П 5 X→П 6.

Чёрные:

Кр e4 — 5 X→П 1 4 X→П 2.

В/О С/П. Белый король наконец оказался «ниже» чёрного на более, чем одну горизонталь. Начинается обычная игра:

Ход ПМК Нажимаемые клавиши Объяснение
1 13 6 4 С/П Л a3 — Кр f4
2 8.2 7 4 С/П Кр h2 — Кр g4
3 23 8 4 С/П Л b3 — Кр h4
4 1        24 7 5 С/П Л b4+ — Кр g5
5 8.3 Кр h3+ — …

Исходный код

Вариант для МК-61/МК-52, имеющий наилучшую сервисность (ход человека вводится двузначным числом, имеется индикация шаха; в вариантах для Б3-34/МК-54/МК-56 приходилось жертвовать одним из этих удобств):

00. П→X2	01. П→X4	02. −		03. 2		04. −		05. X→П7	06. Fx<0	07. 21		08. П→X8	09. КПБ9
10. 5		11. −		12. Кx<0b	13. 8		14. X→П0	15. П→X7	16. −		17. Fx≠0	18. d0		19. П→X0
20. В/О		21. П→X5	22. П→X1	23. −		24. Fx²		25. X→П0	26. FL0		27. 80		28. П→X4	29. П→X6
30. X→П7	31. −		32. Кx=0c	33. П→X2	34. КППa	35. БП		36. 63		37. +		38. X→П3	39. БП
40. 91		41. 2		42. БП		43. 0e		44. К|x|	45. X→П0	46. ÷		47. FL0		48. 36		49. П→X5
50. X→П7	51. П→X1	52. КППa	53. X→П5	54. П→X6	55. БП		56. 63		57. П→X5	58. −		59. Kx≠0c
60. П→X2	61. 1		62. −		63. КППd	64. КПБ9	65. П→X1	66. П→X3	67. −		68. Fx=0	69. 43
70. П→X2	71. КППd	72. F10ˣ	73. КБП9	74. X→П6	75. П→X5	76. П→Xa	77. ×		78. +		79. В/О
80. П→X2	81. П→X6	82. −		83. X→П0	84. FL0		85. 56		86. П→X7	87. Fx≠0	88. 65		89. КП→X4
90. П→X3	91. П→X4	92. П→Xa	93. ÷		94. +		95. С/П		96. В↑		97. X→П0	98. ВП		99. X→П2
A0. −		A1. П→Xa	A2. ÷		A3. X→П1	A4. КБПe

Пояснения:

В целом алгоритм игры белых сводится к 9 возможным действиям:

Блок 00…09 вычисляет расстояние по вертикали от белого короля до чёрного, вычитает из него двойку, результат сохраняет в #7 (для возможной будущей проверки на шагах 86…87) и сравнивает с 0; если разность отрицательна, вызывается буква «Г» и управление передаётся на адрес 95 — останов. (В принципе останов можно было бы делать и на шаге 09, но используемый вариант позволяет повторить ввод, если «Г» появилось из-за некорректного хода игрока в середине партии).

Если расположение фигур устраивает ПМК, проводится очередная проверка (21…27): не стои́т ли ладья на соседней с чёрным королём вертикали. Если стои́т, то ладью следует на всякий случай отвести подальше Но куда — по вертикали или по горизонтали? ПМК проверяет, не стоя́т ли белые фигуры на одной горизонтали (28…32; заодно горизонтальная координата ладьи записывается в #7 для последующей проверки на шагах 15…18). Если стоя́т, то во избежание неприятностей ладья уходит по вертикали (реализуется вариант Л4 или Л5): командами 33…34 вызывается универсальная подпрограмма увода ладьи КППa (10…20, 41…43), которая определяет, на какой половине поля (верхней или нижней) находится чёрный король, и в зависимости от результата намечает, пойти на 8-ю или 2-ю горизонталь, проверяет, не стои́т ли уже ладья на намеченном поле, и, если да, меняет 8 на 7, либо 2 на 1. По возвращении из подпрограммы управление передаётся на шаг 63, там вызывается подпрограмма КППd, записывающая в #6 новую вертикальную координату ладьи и формирующая число для показа на индикаторе, затем управление переходит на 95. С/П. Ход сделан. А если белые фигуры не стоя́т на одной горизонтали, ладья при помощи команд на шагах 32, 49…56, 63…64, 95 и подпрограмм КППa и КППd совершает аналогичный горизонтальный манёвр Л2 или Л3.

Если чёрный король не мешает ладье, ПМК приступает к планомерной осаде. Нормальным, по его мнению, является положение, когда ладья занимает горизонталь, примыкающую «снизу» к позиции преследуемого, а белый король, в свою очередь располагается на предыдущей горизонтали. Команды 26…27 передают управление на участок 80…85: проверяется первое из этих условий. Если оно не выполнено, положение необходимо исправить. Управление передаётся на фрагмент 56…59, производящий предварительную проверку: не стоя́т ли белые фигуры на одной вертикали, ведь в этом случае ладье может помешать собственный король, и ей приходится совершать уже рассмотренный горизонтальный манёвр Л2-Л3 (команды 49…56, 63…64, 95). Если король не мешает, ладья выполняет ход Л6 (60…64, 95).

Если ладья стои́т на должной горизонтали, проверяется вертикальная координата белого короля (86…88; в #7 на данный момент хранится число, записанное командой 05. X→П7). Если король отстал, он делает ход вперёд Кр1 (89…95). Иначе оказываемся на очередной проверке (65…69): при оппозиции королей ладья ходит вперёд с шахом (70…73, 95). В отсутствие оппозиции выполняется последняя проверка: не стоя́т ли короли на смежных вертикалях (43…48). Если да, то ладья выполняет выжидательный горизонтальный манёвр Л3 или Л3 (49…56, 63…64, 95). Иначе король делает ход Кр2 — по горизонтали приближаясь к противнику (36…40, 91…95)

Команды на шагах 96…A4 принимают ввод хода человека, разбивают его на горизонтальную и вертикальную координаты, записывая их в #1 и #2 соответственно, и возвращают управление в начало программы.

Источник: журнал «Техника — молодёжи», № 9 / 1987, стр. 52…54.

Авторы: Станислав Антонович Сухонос (Черкасская область, город Тальное; в первоначальной публикации ошибочно назван С. Белонос (Запорожье)) и редакция «Клуба электронных игр».

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