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

на главную - закладки

Жанры

Программирование на языке Пролог для искусственного интеллекта

Братко Иван

Шрифт:

% Глуб - глубина, на которой находится эта позиция в дереве

% поиска

% Отношения выбора элементов позиции

чей_ход( ЧейХод.._, ЧейХод).

бк( _..БК.._, БК). % Белый король

бл( _.._..БЛ.._, БЛ). % Белая ладья

чк( _.._.._..ЧК.._, ЧК). % Черный король

глуб( _.._.._.._..Глуб, Глуб).

восст_глуб( ЧХ..Б..Л..Ч..Г, ЧХ..Б..Л..Ч..0).

%
Формируется копия позиции, глубина устанавливается в 0

% Некоторые отношения между клетками доски

сосед_чсл( N, N1) :- % Соседнее число "в пределах доски"

 ( N1 is N + 1;

N1 is N - 1 ),

 внутри( N1).

внутри( N) :-

 N > 0, N < 9.

сосед_диаг( X : Y, X1 : Y1) :-

% Соседние клетки по диагонали

 сосед_чсл( X, X1 ), сосед_чсл( Y, Y1).

сосед_верт( X : Y, X : Y1) :-

% Соседние клетки по вертикали

 сосед_чсл( Y, Y1).

сосед_гор( X : Y, X1 : Y) :-

% Соседние клетки по горизонтали

 сосед_чсл( X, X1).

сосед( S, S1) :-

% Соседние клетки (предпочтение - диагонали)

 сосед_диаг( S, S1);

 сосед_гор( S, S1);

 сосед_верт( S, S1).

конец_игры( Поз) :-

 мат( Поз).

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

% Специализированное генераторы ходов вида:

% ход( Ограничение, Поз, Ход, Поз1)

ход( глубина < Макс, Поз, Ход, Поз1) :-

 глуб( Поз, Г),

 Г < Макс, !.

ход( глубина = Г, Поз, Ход, Поз1) :-

 глуб( Поз, Г), !.

ход( сначала диаг, б..Б..Л..Ч..Г, Б-Б1,

 ч..Б1..Л..Ч..Г1) :-

 Г1 is Г + l,

 сосед( Б, Б1),

% "сосед" порождает сначала диагональные ходы

 not сосед( Б1, Ч), % Не попасть под шах

 Б1 \== Л. % Не столкнуться с ладьей

ход( ход ладьей, б..Б..Лх : Лу..Ч..Г, Лх : Лу-Л,

 ч..Б..Л..Ч..Г1) :-

 Г1 is Г + 1,

 коорд( I), % Число между 1 и 8

 (
Л = Лх : I; Л = I : Лу),

% По горизонтали или по вертикали

 Л \== Лх : Лу, % Обязательно двигаться

 not мешает( Лх : Лу, Б, Л). % Мешает белый король

ход( ход_шах, Поз, Л-Лх : Лу, Поз1) :-

 бл( Поз, Л),

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

 ( Лх = Чх; Лу = Чу),

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

 ход( ход_ладьей, Поз, Л-Лх : Лу, Поз1).

ход( разреш, б..П, М, П1) :-

 ( Огр = сначала_диаг; Огр = ход ладьей),

 ход( Огр, б..П, М, П1).

ход( разреш, ч..Б..Л..Ч..Г, Ч-Ч1, б..Б..Л..Ч1..Г1) :-

 Г1 is Г + 1,

 сосед( Ч, Ч1),

 not шах( б..Б..Л..Ч1..Г1).

разрход( Поз, Ход, Поз1) :-

 ход( разреш, Поз, Ход, Поз1).

 шах( _..Б..Лх : Лу..Чх : Чу.._ ) :-

 сосед( Б, Чх : Чу); % Короли рядом

 ( Лх = Чх; Лу = Чу),

 Лх : Лу \== Чх : Чу, % Нет взятия ладьи

 not мешает( Лх : Лу, Б, Чх : Чу).

мешает( S, S1, S1) :- !.

мешает( X1 : Y, X2 : Y, Х3 : Y) :-

 упоряд( X1, Х2, Х3), !.

мешает( X : Y1, X : Y2, X : Y3) :-

 упоряд( Y1, Y2, Y3).

упоряд( N1, N2, N3) :-

 N1 < N2, N2 < N3;

 N3 < N2, N2 < N1.

коорд( 1). коорд( 2). коорд( 3). коорд( 4).

коорд( 5). коорд( 6). коорд( 7). коорд( 8).

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

любая_поз( Поз).

ход_противника( б.._ ). % Противник ходит белыми

мат( Поз) :-

 чей_ход( Поз, ч),

 шах( Поз),

 not разрход( Поз, _, _ ).

пат( Поз) :-

 чей_ход( Поз, ч),

 not шах( Поз),

 not разрход( Поз, _, _ ).

уменьш_простр( Поз, КорнПоз) :-

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

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

 Пр < КорнПр.

Поделиться:
Популярные книги

Сердце Дракона. Том 20. Часть 1

Клеванский Кирилл Сергеевич
20. Сердце дракона
Фантастика:
фэнтези
боевая фантастика
городское фэнтези
5.00
рейтинг книги
Сердце Дракона. Том 20. Часть 1

Холодный ветер перемен

Иванов Дмитрий
7. Девяностые
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Холодный ветер перемен

Последнее желание

Сапковский Анджей
1. Ведьмак
Фантастика:
фэнтези
9.43
рейтинг книги
Последнее желание

Отмороженный 7.0

Гарцевич Евгений Александрович
7. Отмороженный
Фантастика:
рпг
аниме
5.00
рейтинг книги
Отмороженный 7.0

Наследник

Кулаков Алексей Иванович
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
8.69
рейтинг книги
Наследник

Магия чистых душ 2

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.56
рейтинг книги
Магия чистых душ 2

Наследие Маозари 5

Панежин Евгений
5. Наследие Маозари
Фантастика:
фэнтези
юмористическое фэнтези
5.00
рейтинг книги
Наследие Маозари 5

Локки 4 Потомок бога

Решетов Евгений Валерьевич
4. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Локки 4 Потомок бога

Граф

Ланцов Михаил Алексеевич
6. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Граф

Миф об идеальном мужчине

Устинова Татьяна Витальевна
Детективы:
прочие детективы
9.23
рейтинг книги
Миф об идеальном мужчине

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Здравствуй, 1984-й

Иванов Дмитрий
1. Девяностые
Фантастика:
альтернативная история
6.42
рейтинг книги
Здравствуй, 1984-й

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Барон не играет по правилам

Ренгач Евгений
1. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон не играет по правилам