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

На машине АТЛАС данная программа решила задачу на мат в два хода за 45 с-После переписывания программы в безик-код * это время сократилось до 5 с. Программа может также проверять единственность решения.

Исключения

Приведенная здесь программа не даст решения в двух случаях, когда возможны* 1) рокировка или 2) взятие пешки на проходе. Эти случаи не были включены в про-

УРОВЕНЬ Б1 f

41 f


W 2 ЧНр-hl J /7-4-

Последние ходы черных исчерпаны,

следовательно, решением является

Последний ход объявлен ли теперь тх

черных был цернвну королю ?Да. (Л: Кр)

незаконным, ь м и/

пробуем другой

ЧКр-Ы *J уХ

П: ЧКр


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

Рис. 5. Блок-схема решения задачи, приведенной на рис. 4.

грамму, потому что они замедляют ее работу, а встречаются в таких задачах редко;-Однако, если требуется, то их можно включить в программу следующими способами..

Рокировка

Для любой заданной позиции, в которой возможны четыре варианта рокировки,, в программе должны быть предусмотрены четыре логические переменные. Оператор КОРОТКАЯ РОКИРОВКА БЕЛЫХ: = ДЛИННАЯ РОКИРОВКА БЕЛЫХ:=КОРОТ-КАЯ РОКИРОВКА ЧЕРНЫХ: = ДЛИННАЯ РОКИРОВКА ЧЕРНЫХ: =true; будет использоваться тогда, когда программа предназначается для позиции, в которой все-еще возможны все рокировки (рис. 6).

Для упрощения задачи позиции короля, королевской ладьи и ферзевой ладьи в массиве СВОИ ПОЛЯ должны быть фиксированы для обеих сторон (например, 1, 2 в 3, как это дано на рис. 6,6 и е) **.

Для выполнения короткой рокировки белых нужно только дополнить массив-

* basic code. {Прим. ред.)

** Этого можно достичь, если выписывать входные данные, подлежащие вводу в память машины, в соответствующем порядке: первым вводится король, второй - королевская ладья (если она имеется, или другая фигура в противном случае), третьей- ферзевая ладья и лишь после этого все остальные фигуры. Например, для получения начала массива ПОЛЯ БЕЛЫХ такого, как это показано яа рис. 6,6 (для позиции 6,а), нужно начинать входные данные следующими числами: и; 6;5; 4;8; 4;1;... где п - количество белых фигур, участвующих в задаче. {Прим. ред.)



список следующей последовательностью чисел:

1 6 5-7 2 4 8 6 -8 1 6 7-5

Кр el-gl Л hi-fl Возврат рокировки

Тогда процедура ВЫПОЛНЕНИЕ ХОДА будет работать правильно. Для длинной рокировки белых необходим следующий список;

1 6 5-3 3 4 1 4 -1 1 6 3-5 Кр el-с1 Л al-dl Возврат рокировки

Рис. 6. Рокировка:

а - положение фнгур. участвующих в рокировке: б - ПОЛЯ БЕЛЫХ; е-поля ЧЕРНЫХ.

57 58 59 ВО Б1 61 63 64 Кр Л Л

1 1 3

4 5 а

6 7

\61\Б4 57

Кр Л Л

Для короткой рокировки черных - список

. 1 6 61-63 2 4 64 62 -64 1 6 63-61

Кр е8-g8 Л 1(8-f8 Возврат рокировки

Для длинной рокировки черных - список

1 6 61-59 3 4 57 60 -57 1 6 59-61

Кр е8--с8 Л а8-d8 Возврат рокировки

Затруднение состоит в том, что необходимо выяснить, можно ли соответствующий список добавлять к массиву СПИСОК на законном основании. Необходимо поставить-три вопроса.

1. Делались ли ходы королем или ладьями? (четыре логические переменные помогают ответить на этот вопрос).

2. Имеются ли фигуры между королем и ладьей?

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

Взятие пешки на проходе

Для реализации взятия пешки на проходе требуется использование массива НА ПРОХОДЕ, в котором запоминается позиция «фиктивной» пешки, когда пешка делает ход на два поля вперед. Необходимо проделать четыре следующие операции и вставить в программу указанные в них операторы с метками ер\, ер2, ерЗ и ер4 * (последний в двух местах) соответственно.

1. Проверить, делается ли данной пешкой ход на два поля вперед, и, если да, то запсмнить позицию фиктивной пешки.

* ер - сокращение от en passant - на проходе. {Прим. ред.)



epl: НА ПРОХОДЕ [УРОВЕНЬ]: =

if q[yPOBEHb] = l Л abs (ОБРАТНО К{УРОВЕНЬ]-НА)>10 then (ОБРАТНО Ki[yPOBEHb]-fHA)-f-2 else 0;

2. При составлении списка ходов проверить, может ли рассматриваемая пешка взять возможную фиктивную пешку, и, если да, то внести этот ход в СПИСОК. ер2: if ЧУЖАЯ ДОСКА[ТАБЛИЦА ПЕШЕЩЩфОХ/

ТАБЛИЦА ПЕШЕК[1] = НА ПРОХОДЕ{УР0ВЕНЬ-1] then

3. После .выполнения хода пешкой проверить, не является ли он взятием на проходе, я, если да, то взять формально фигуру с отрицательным значением и убрать с доски фактическую пешку *.

ерЗ: if q[yPOBEHb]=lA НА = НА ПРОХОДВ[УРОВЕНЬ-1] then begin ДОСКА ЧУЖИХ[Н.31]: =-1;

ДОСКА ЧУЖИXIif НА<32 then НА+8 else НА-8]: = О end;

4. При выполнении возврата хода проверить, ие отрицательно ли значение с[УРО-ВЕНЬ], т. е. не был ли выполненный ход взятием на юходе. Если да, то восстановить фактическую пешку (это нужно сделать в двух местахпрограммы).

ер4: if с[УРОВЕНЬ]=-1 then

ДОСКА ЧУЖИX{if НА<32 then НА+8 else НА-8]:=0 else ДОСКА ЧУЖИХ{ОТ]:=с[УРОВЕНЬ];

Ввод и вывод

Рекомендуется таблицы и позиции вводить так, как это показано в дополнении 3. Процедура ПЕЧАТЬ ПОЗИЦИИ, приведенная в дополнении 4, полезна во время отладки программы. В обоих приложениях используются операторы ввода - вывода, принятые в системе АТЛАС (ICT, 1966) и являющиеся самоочевидными **.

Резюме и приложения

Данная работа посвящена главным образом описанию методов генерации списка всех законных ходов в любой шахматной позиции.

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

Автор надеется, что данная работа будет полезна всем, кто захочет написать программу игры в шахматы. Разумеется, методы данной работы (особенно содержание таблиц) не догма и должны быть приспособлены к машине и используемому языку.

Главную ценность представляют следующие моменты.

1. Табличное управление программой.

2. Проверка законности хода при его фактическом выполнении и вызове для противника процедуры ОБЗОР ХОДОВ. Это исключает проблемы связки и хода под шах, на решение которых некоторые программы теряют время. Если все законно, то данная программа сразу же готова к выполнению ответного хода противника.

3. Превращение пешки в фигуру, рокировка и взятие пешки на проходе. Ни одна из ранее опубликованных программ не включала в себя рассмотрение этих операций.

* Нижеследующие операторы с меткой «ерЗ:» (так же как и следующие далее операторы с меткой «ер4:») были опубликованы в алгоритме 50 неправильно. Правильные их варианты .см. ияже в «Свидетельстве .к алгоритму 50CJ». [Прим. ред.)

** В ажоритме 50CJ операторы ввода - вывода системы АТЛАС заменены операторами ввода - вы1воиа системы БЭСМ - АЛГОЛ [29, 45]. {Прим. ред.)





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.0017