Чтение онлайн

ЖАНРЫ

Неизвестно

Шрифт:

(1) Найти способ поставить королю противника мат в два хода.

(2) Если не удалось, то найти способ уменьшить ту область доски, в которой

король противника "заперт" под воздействием ладьи.

(3) Если и это не удалось, то найти способ приблизить своего короля к королю

противника.

(4) Если ни один из элементарных советов 1, 2, или 3 не выполним, то найти

способ сохранить все имеющиеся к настоящему моменту "достижения" в

смысле (2) и (3) (т. е. сделать выжидающий ход).

(5) Если ни одна из целей 1, 2, 3 или 4 не достижима, то найти способ получить

позицию, в которой ладья занимает вертикальную или горизонтальную

линию, отделяющую одного короля от другого.

Описанные выше принципы реализованы во всех деталях в таблице советов на языке AL0, показанной на рис. 15.7. Эта таблица может работать под управлением интерпретатора рис. 15.6. Рис. 15.8 иллюстрирует смысл некоторых из предикатов, использованных в таблице советов, а также показывает, как эта таблица работает.

В таблице используются следующие предикаты:

Предикаты целей

мат мат королю противника

пат пат королю противника

потеря_ладьи король противника может взять ладью

ладья_под_боем король противника может напасть на ладью прежде, чем наш

король сможет ее защитить

уменьш_простр уменьшилось "жизненное пространство" короля противника,

ограничиваемое ладьей

раздел ладья занимает вертикальную или горизонтальную линию,

разделяющую королей

ближе_к_клетке наш король приблизился к "критической клетке" (см. рис. 15.9),

т.е. манхеттеновское расстояние до нее уменьшилось

l_конфиг "L-конфигурация" (рис. 15.9)

простр_больше_2 "жизненное пространство" короля противника занимает

больше двух клеток

Предикаты, ограничивающие ходы

глубина = N ход на глубине N дерева поиска

разреш любой разрешенный ход

ход_шах ход, объявляющий шах

ход_ладьей ход ладьей

нет_хода ни один ход не подходит

сначала_диаг ход королем, преимущественно по диагонали

% Окончание "король и ладья против короля" на языке AL0

% Правила

правило_края:

если король_противника_на_краю и короли_рядом

то [мат_2, потеснить, приблизиться,

сохранить_простр, отделить_2, отделить_3].

иначе_правило

если любая_поз

то [ потеснить, приблизиться, сохранить_простр,

отделить_2, отделить_3].

% Элементарные советы

совет( мат_2,

мат :

не потеря_ладьи и король_противника_на_краю:

(глубина = 0) и разреш

затем (глубина = 2) и ход_шах :

(глубина = 1) и разреш ).

совет( потеснить,

уменьш_простр и не ладья_под_боем и

раздел и не пат :

не потеря_ладьи :

(глубина = 0) и ход_ладьей :

нет_хода ).

совет( приблизиться,

ближе _к_клетке и не ладья_под_боем и

(раздел или l_конфиг) и

(простр_больше_2 или не наш_король_на_краю):

не потеря_ладьи :

(глубина = 0) и сначала_диаг :

нет_хода ).

совет( сохранить_простр,

ход_противиика и не ладья_под_боем и раздел

и не_дальше_от_ладьи и

(простр_больше_2 или не наш_король_на_краю):

не потеря_ладьи :

(глубина = 0) и сначала_диаг :

Поделиться с друзьями: