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

ЖАНРЫ

Неизвестно

Шрифт:

выполн1( Совет, Поз, КорнПоз, ФДер).

выполн1( Совет, Поз, КорнПоз, nil) :-

главцель( Совет, ГлЦ),

удовл( ГлЦ, Поз, КорнПоз), !.

% Главная цель удовлетворяется

выполн1( Совет, Поз, КорнПоз, Ход .. ФДеревья) :-

чей_ход( Поз, б), !, % Программа играет белыми

ходы_игрока( Совет, ХодыИгрока),

% Ограничения на ходы игрока

ход( ХодыИгрока, Поз, Ход, Поз1),

% Ход, удовлетворяющий ограничению

выполн( Совет, Поз1, КорнПоз, ФДеревья).

выполн1( Совет, Поз, КорнПоз, ФДеревья) :-

чей_ход( Поз, ч), !, % Противник играет черными

ходы_противника( Совет, ХодыПр),

bagof ( Ход . . Поз1, ход( ХодыПр, Поз, Ход, Поз1), ХПспис),

выполн_все( Совет, ХПспис, КорнПоз, ФДеревья).

% Совет выполним во всех преемниках Поз

выполн_все( _, [ ], _, [ ]).

выполн_все( Совет, [Ход . . Поз | ХПспис], КорнПоз,

[Ход . . ФД | ФДД] ) :-

выполн( Совет, Поз, КорнПоз, ФД),

выполн_все( Совет, ХПспис, КорнПоз, ФДД).

% Интерпретация главной цели и цели-поддержки:

% цель - это И / ИЛИ / НЕ комбинация. имен предикатов

удовл( Цель1 и Цель2, Поз, КорнПоз) :- !,

удовл( Цель1, Поз, КорнПоз),

удовл( Цель2, Поз, КорнПоз).

удовл( Цель1 или Цель2, Поз, КорнПоз) :- !,

( удовл( Цель1, Поз, КорнПоз);

удовл( Цель2, Поз, КорнПоз) ).

удовл( не Цель, Поз, КорнПоз) :- !,

not удовл( Цель, Поз, КорнПоз ).

удовл( Пред, Поз, КорнПоз) :-

( Усл =.. [Пред, Поз];

% Большинство предикатов не зависит от КорнПоз

Усл =.. [Пред, Поз, КорнПоз] ),

call( Усл).

% Интерпретация ограничений на ходы

ход( Ходы1 и Ходы2, Поз, Ход, Поз1) :- !,

ход( Ходы1, Поз, Ход, Поз1),

ход( Ходы2, Поз, Ход, Поз1).

ход( Ходы1 затем Ходы2, Поз, Ход, Поз1) :- !,

( ход( Ходы1, Поз, Ход, Поз1);

ход( Ходы2, Поз, Ход, Поз1) ).

% Доступ к компонентам элементарного совета

главцель( ГлЦ : _, ГлЦ).

поддержка( ГлЦ : ЦП : _, ЦП).

ходы_игрока( ГлЦ : ЦП : ХодыИгрока : _, Ходы Игрока).

ходы_противника( ГлЦ : ЦП: ХодыИгр : ХодыПр :_,

ХодыПр).

принадлежит( X, [X | Спис]).

принадлежит( X, [Y | Спис]) :-

принадлежит( X, Спис).

Рис. 15. 6. Миниатюрный интерпретатор языка AL0.

игра( Поз)

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

Форсированное дерево - это дерево ходов, представленное в программе следующей структурой:

Ход . . [ Ответ1 . . Фдер1, Ответ2 . . Фдер2, . . . ]

Здесь ".." - инфиксный оператор; Ход– первый ход "игрока"; Ответ1, Ответ2, ...
– возможные ответы противника; Фдер1, Фдер2, ...
– форсированные поддеревья для каждого из этих ответов

.

15. 6. 2. Программа на языке советов для эндшпиля

"король и ладья против короля"

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

Повторять циклически, пока не будет поставлен мат (постоянно проверяя, что не возникла патовая позиция и что нет нападения на незащищенную ладью):

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