Читаем Prolog полностью

                расст( Б, Л, Р1),

                расст( Ч, Л, Р2),

                ( ЧейХод = б,  !,  Р1 > Р2 + 1;

                  ЧейХод = ч,  !,  Р1 > Р2 ).

        ближе_к_клетке( Поз, КорнПоз) :-

                расст_до_клетки( Поз, Р1),

                расст_до_клетки( КорнПоз, Р2),

                Р1 < Р2.

        расст_до_клетки( Поз, Мрасст) :-

                                                          % Манхеттеновское расстояние

                бк( Поз, БК),                   % между БК и критической клеткой

                кк( Поз, КК),                   % Критическая клетка

                манх_расст( БК, КК, Мрасст).

        раздел( _..Бх : Бу..Лх : Лу.. Чх : Чу.._ ) :-

                упоряд( Бх, Лх, Чх),  !;

                упоряд( Бу, Лу, Чу).

        l_конфиг( _..Б..Л..Ч.._ ) :-                           % L - конфигурация

                манх_расст( Б, Ч, 2),

                манх_расст( Л, Ч, 3).

        не дальше_от_ладьи( _..Б..Л.._, _..Б1..Л1.._ ) :-

                расст( Б, Л, Р),

                расст( Б1, Л1, Р1),

                Р =< Р1.

        простр_больше_2( Поз) :-

                простр( Поз, Пр),

                Пр > 2.

        наш_король_на_краю( _..Х : Y.._ ) :-

                                                          % Белый король на краю

                ( X = 1,  !;  X = 8,  !;  Y = 1,  !;  Y = 8).

        король_противника_на_краю( _..Б..Л..Х : Y.._ ) :-

                                                          % Черный король на краю

                ( X = 1,  !;  X = 8,  !;  Y = 1,  !;  Y = 8).

        короли_рядом( Поз) :-                                       % Расстояние между королями  <  4

                бк( Поз, БК), чк( Поз, ЧК),

                расст( БК, ЧК, Р),

                Р < 4.

        потеря_ладьи( _..Б..Л..Л.._ )-                       % Ладья взята

        потеря_ладьи( ч..Б..Л..Ч.._ ) :-

                сосед( Ч, Л),                    % Черный король напал на ладью

                not сосед( Б, Л).              % Белый король не защищает ладью

        расст( X : Y, X1 : Y1, Р) :-                                % Расстояние до короля

                абс_разн( X, X1, Рх),

                абс_разн( Y, Y1, Ру),

                макс( Рх, Ру, Р).

        абс_разн( А, В, С) :-

                А > В,  !,  С is A - В;

                С is В - А.

        макс( А, В, М) :-

                А >= В,  !,  М = А;

                М = В.

        манх_расст( X : Y, X1 : Y1, Р) :-                  % Манхеттеновское расстояние

                абс_разн( X, X1, Рх),

                абс_разн( Y, Y1, Ру),

                P is Рх + Ру.

        простр( Поз, Пр) :-

                                    % Область, в которой "заперт" черный король

                бл( Поз, Лх : Лу),

                чк( Поз, Чх : Чу),

                ( Чх < Лх, СторонаХ is Лх - 1;

                  Чх > Лх, СторонаХ is 8 - Лх ),

                ( Чу < Лу, СторонаY is Лу - 1;

                  Чу > Лу, СторонаY is 8 - Лу ),

                Пр is СторонаХ * СторонаY,  !;

                Пр = 64.      % Ладья и черный король на одной линии

        кк( _..Б..Лх : Лу.. Чх : Чу.._, Кх : Ку) :-

                                    % Критическая клетка

                ( Чх < Лх,  !,  Кх is Лх - 1;  Кх is Лх + 1),

                ( Чу < Лу,  !,  Ку is Лу - 1;  Ку is Лу + 1).

% Процедуры для отображения позиций

        отобр( Поз) :-

                nl,

                коорд( Y), nl,

                коорд( X),

                печ_фиг( X : Y, Поз),

                fail.

        отобр( Поз) :-

                чей_ход( Поз, ЧХ), глуб( Поз, Г),

                nl, write( 'ЧейХод='), write( ЧХ),

                write( 'Глубина='), write( Г), nl.

        печ_фиг( Клетка, Поз):-

                бк( Поз, Клетка),  !,  write( 'Б');

                бл( Поз, Клетка),  !,  write( 'Л');

                чк( Поз, Клетка),  !,  write( 'Ч');

                write( '.').

        показать_ход( Ход) :-

                nl,    write( Ход),  nl.

Рис. 15. 10.  Библиотека предикатов для окончания "король и ладья против короля".

Резюме

Игры двух лиц поддаются формальному представлению в виде И / ИЛИ-графов. Поэтому процедуры поиска в И / ИЛИ-графах применимы для поиска в игровых деревьях.

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

Перейти на страницу:

Похожие книги

12 великих трагедий
12 великих трагедий

Книга «12 великих трагедий» – уникальное издание, позволяющее ознакомиться с самыми знаковыми произведениями в истории мировой драматургии, вышедшими из-под пера выдающихся мастеров жанра.Многие пьесы, включенные в книгу, посвящены реальным историческим персонажам и событиям, однако они творчески переосмыслены и обогащены благодаря оригинальным авторским интерпретациям.Книга включает произведения, созданные со времен греческой античности до начала прошлого века, поэтому внимательные читатели не только насладятся сюжетом пьес, но и увидят основные этапы эволюции драматического и сценаристского искусства.

Александр Николаевич Островский , Иоганн Вольфганг фон Гёте , Оскар Уайльд , Педро Кальдерон , Фридрих Иоганн Кристоф Шиллер

Драматургия / Проза / Зарубежная классическая проза / Европейская старинная литература / Прочая старинная литература / Древние книги
Волчья тропа
Волчья тропа

Мир после ядерной катастрофы. Человечество выжило, но высокие технологии остались в прошлом – цивилизация откатилась назад, во времена Дикого Запада.Своенравная, строптивая Элка была совсем маленькой, когда страшная буря унесла ее в лес. Суровый охотник, приютивший у себя девочку, научил ее всему, что умел сам, – ставить капканы, мастерить ловушки для белок, стрелять из ружья и разделывать дичь.А потом она выросла и узнала страшную тайну, разбившую вдребезги привычную жизнь. И теперь ей остается только одно – бежать далеко на север, на золотые прииски, куда когда-то в поисках счастья ушли ее родители.Это будет долгий, смертельно опасный и трудный путь. Путь во мраке. Путь по Волчьей тропе… Путь, где единственным защитником и другом будет таинственный волк с черной отметиной…

Алексей Семенов , Бет Льюис , Даха Тараторина , Евгения Ляшко , Сергей Васильевич Самаров

Фантастика / Приключения / Боевик / Славянское фэнтези / Прочая старинная литература