Главная Промышленная автоматика.

конь (в рассматриваемом случае только два поля), а предыдущие два числа - номера этих полей (18 и 11). Нули в таблицах не используются.

Таблица ходов короля (дополнение 1.16) построена точно так же. Таким образом, процедуре ХОДЫ КОНЯ И КОРОЛЯ для определения полей, на которые может ходить одна из этих фигур, требуется только номер поля, занятого конем или королем, вместе с соответствующей таблицей. Генерируемые (т. е. получаемые в процессе выполнения процедуры) ходы последовательно запоминаются в массиве с идентификатором СПИСОК. Следует заметить, что перед выбором хода делаются две пробы (эти пробы применяются ко всем фигурам при обзоре их ходов). Первая проба обусловлена тем, что ншакая фигура не может ходить на поле, занятое фигурой того же цвета, вторая - тем, что, если фигура может пойти на поле, занятое королем противника, то обзор дальнейших ходов заканчивается {путем выхода иа метку ПРЕРЫВАНИЕ). Так проверяется правильность предыдущего хода противника. Рокировка рассматривается в разделе «Рокировка».

Таблицы ладьи и слот

Таблица ладьи (дополнение 1.2а) служит для генерации ходов ладьи. Первая строка - это приращения, необходимые для передвижения ладьи с ее исходного поля в каждом из четырех возможных направлений, т. е. на восток (-fl), запад (-1), север (-f-8) и юг (-8). Снова, как и в предыдущей таблице, рассмотрим строку 1, которая используется тогда, когда ладья находится на поле 1. Первое число (т. е. 8)- это последнее поле доски (см. рис. 2), если ладья передвигается на восток, второе число (1), если на запад, третье (57), если на север, и четвертое (1), если на юг. Попытки передвижения на запад и иа юг с поля 1 будут исключены.

Максимальное число ходов, которое может сделать ладья, равно 14. Каждый из этих ходов может быть сделан только тогда, когда горизонталь и вертикаль этой ладьи свободны, или когда только последние поля заняты фигурами противника. Однако, как и в процедуре ХОДЫ КОНЯ И КОРОЛЯ, каждое генерированное поле должно быть проверено на присутствие одноцветной фигуры. Если такое присутствие обнаруживается, то ход на это поле исключается и выбирается новое приращение (т. е. новое направление) с помощью оператора.

If СВОЯ ДОСКАИ¥=..0 then go to НОВОЕ НАПРАВЛЕНИЕ;

Если же поле не занято своей фигурой, то данный ход добавляется к списку ходов (к массиву СПИСОК) и делается новая проверка (не занято ли поле фигурой противника) с помощью условия

if ЧУЖАЯ ДОСКА И Ф. О then

Если не занято, то в рассматриваемом направлении генерируется следующее поле. В противном случае либо выход из процедуры, если поле занято королем противника (подобно тому, как это делалось в процедуре ХОДЫ КОНЯ И КОРОЛЯ), либо выбор другого направления. Когда процедура исчерпает все поля по всем четырем направлениям, она заканчивается.

Таблица слоиа (дополнение 1.26) испо.пьзуется точно так же. Четырьмя направлениями в этом случае являются северо-восток (-1-9), юго-запад (-9), северо-запад (-г7) и юго-восток (-7).

Таблицы белой и черной пешек

В отличие от фигур цвет для пешек существен. В данной программе белые пешки

передвигаются по доске вверх, а черные - вниз, отсюда де таблицы. Генерация ходов для пешки наиболее сложная, поскольку пешка имеет пять различных ходов.



PacCiMOTpuM ходы белой пешки:

1) с ее начальной позиции она может продвинуться вверх по доске иа одно или два свободных поля;

2) после этого она продвигается за один ход иа одно свободное поле;

3) берет фигуру противника иа смежном северо-восточном или северо-западном

поле;

4) превращается в ферзя, ладью, слона или коня при достижении восьмой горизонтали;

5) берется на проходе.

Черная пешка отличается от белой лишь тем, что она должна всегда передвигаться вниз по доске.

Таблицы отражают только ходы 1, 2 и 3. Превращение пешки в фигуру рассматривается в самой программе (см. раздел «Выполнение ходов»), а взятие пешки яа проходе - в одноименном разделе.

Таблица белой пешки (дополнение 1.3а) используется для генерации возможных ходов белой пешки. Пешки могут находиться только иа полях от 9 до 56-го, и строки таблицы пронумерованы соответственно этому. Первый столбец - это продвижение пешки вперед на одно поле, и если это поле свободно, ход фиксируется. Тогда и только тогда программа попытается продвинуть пешку через одно поле на второе (номер этого поля находится во втором столбце). Если это поле тоже свободно, то данный ход тоже фиксируется. Заметим, что как только пешка сделала ход, то двойной ее ход, определяемый таблицей, всегда запрещается, потому что поле, очевидно, занято (самой этой пешкой!).

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

Таблица черной пешки (дополнение 1.36) используется точно так же. Снова процедура ХОДЫ ПЕШЕК требует только задания поля, занятого пешкой, и таблицы, соответствующей цвету пешки. Делается обычная проверка на взятие короля противника.

Обзор ходов, возможных в данной позиции

Процедура ОБЗОР ХОДОВ использует три процедуры, описанные в предыдущем разделе, и работает для любой фигуры, как белой, так и черной. Однако отдельные фигуры должны между собой различаться, поэтому каждой фигуре ставится в соответствие целое число. Так король (Кр) - это 6, ферзь (Ф) - 5, ладья (Л) -- 4, слон {С) -3, конь (К) -2 и пешка (П) -1.

Рассмотрим рис. 3,а, где изображена позиция *, в которой белые дают мат в два хода. Рисунки 3,6 и в являются требующимися для процедуры представлениями этой позиции, записанными в массивах ДОСКА БЕЛЫХ и ДОСКА ЧЕРНЫХ.

Процедура ОБЗОР ХОДОВ имеет пять параметров.

!. СВОИ ПОЛЯ -целый массив размерности [0:161, указывающий

а) сколько полей занято на доске белыми или черными фигурами (в СВОИ ПОЛЯ [0]).

б) какие поля они занимают (рис. 3,г и д).

2. СВОЯ ДОСКА - представление доски, содержащей фигуры той стороны, ходы которой мы хотим зафиксировать (рис. 3,6).

3. ЧУЖАЯ ДОСКА--представление доски, содержащей фигуры протгоиика

* Ради стремления, как можно меньше отклоняться от оригинала, в изображениях фигур «а шахматной доске сохранены обозначения А. Белла для белых (квой Б) и черных (буквой Ч) фигу.р. Однако более наглядно было бы различать их знаком + и - соответственно (Прим. ред.)



(рис. 3,в). Этот параметр используется для определения взятия фигур и, следовательно, должен быть отделен от параметра СВОЯ ДОСКА.

4. РУБЕЖ - значение индекса переменных в массиве СПИСОК, начиная с которого записываются генерированные ходы.

5. ПРЕРЫВАНИЕ - метка, используемая тогда, когда может быть взят король противнжа, т. е. когда его последний ход был незаконный.

11 10 1Z 14 IB zz 32 52 39 Sf 57 61

д6 37

Рис. 3. Представление белых и черных фигур на доске:

а - пример реальной позиции; б - ДОСКА БЕЛЫХ; в - ДОСКА ЧЕРНЫХ; г -число н позиции U белых фигур (ПОЛЯ БЕЛЫХ); а -число в позиции 7 черных фигур (ПОЛЯ ЧЕРНЫХ).

При обращении к процедуре ОБЗОР ХОДОВ генерируемая информация последовательно запоминается в массиве СПИСОК, начиная с элемента с индексом РУБЕЖ. Для примера, приведенного на рисунках 3,а-д, цикл устанавливается на рассмотрение И фигур

for р:=СВОИ ПОЛЯ Ш step -1 until 1 do

и переменная ПОЛЕ последовательно получает значение номера поля, которое занимает каждая из белых фигур. Если теперь это поле оказывается свободным, то фигура была взята. Если же на рассматриваемом поле имеется фигура, то перед генерацией ее ходов она сначала регистрируется путем запоминания в массиве СПИСОК следующих трех элементов информации:

1) р - указатель • местонахождения в массиве СВОИ ПОЛЯ номера поля данной фигуры;

2) СВОЯ ДОСКА [ПОЛЕ] - числовое значение данной фигуры (пешка-1, конь-2 и т. д.);

3) ПОЛЕ - положение данной фигуры на доске.

Эта информация используется позже, когда ход делается фактически.

р - начальная буква слова pointer - указатель. (Прим. ред.}





0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [28] 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

0.0025