Базовая программа на Прологе игры с самообучением :
game:-
'инициализировать'(Position,Gamer),
'отобразить игру'(Position,Gamer),
game(Position,Gamer,[],Rezalt).
game(Position,Gamer,History,Rezalt):-
/* History - список пар (Позиция/Кто ходил перед этим) */
'игра окончена'(Position,Gamer,Rezalt),!,
'объявить'(Rezalt),
'самообучение'(Position,Gamer,History,Rezalt).
Если у вас проблемы с зубами, альтернатива протезированию - имплантанты, узнать подробности можно тут: http://www.fdc-vip.ru/service/otdelenie-implantologii/implantatsiya-zubov/.
game(Position,Gamer,History,Rezalt):-
'выбрать ход'(Position,Gamer,Go),!,
'ходить'(Go,Position,PositionNext),
'другой игрок'(Gamer,Gamer1),
'отобразить игру'(PositionNext,Gamer1),
game(PositionNext,Gamer1,[PositionNext/Gamer|History],Rezalt).
Возможно, следующие предикаты будут полезны.
Позиция представляется в виде пары
(Список белых пешек - Список черных пешек),
координаты пешек - целые числа от 1 до 9.
Исходная позиция - [1,2,3]-[7,8,9].
value(Позиция,С_точки_зрения,Оценка) - предикат базы знаний
'самообучение'(_,Gamer,_,Gamer).
'самообучение'(Position,Gamer,History,Rezalt):-
not(Gamer=Rezalt),
'другой игрок'(Gamer,Gamer1),
'уменьшить оценки'([Position/Gamer1|History],Gamer).
'возможный ход белыми'(W-B,From-Where)
'возможный ход черными'(W-B,From-Where)
'выбрать ход'(Position,white,From-Where)
'выбрать ход'(Position,black,Go):-
/* находим список всех позиций-преемников данной Position
и выбираем среди них позицию с большей оценкой */
'позиции-преемники'(Position,black,Sons),
'позиция с лучшей оценкой'(Sons,P),
'ходить'(Go,Position,P).
|