У меня есть простая игра в крестики-нолики, есть много примеров этого онлайн, которые используют минимальное усиление, но я просто хочу использовать простой пример для моего собственного понимания.Я отобразил доску в окне 3х3, в котором есть система нумерации, из которой пользователи могут выбирать, следующим образом:
:- dynamic o/1.
:- dynamic x/1.
% The computer has made a turn, print O
printBox(N) :- o(N), write('[o]').
% The player makes a turn, print X
printBox(N) :- x(N), write('[x]').
% We just want to print the empty board
printBox(N) :- blankSpace(N), write('[_]').
buildBoard :- printBox(1),printBox(2),printBox(3),nl,
printBox(4),printBox(5),printBox(6),nl,
printBox(7),printBox(8),printBox(9),nl.
playersMove :-
read(X),
blankSpace(X),
assert(x(X)).
Когда пользователь выбирает из указанных выше вариантов (1-9), доска заполняетсяс Х для игрока-человека и О для компьютера.Теперь у меня также есть факты для выигрышных линий:
winningLine(1,2,3).
winningLine(4,5,6).
winningLine(7,8,9).
%Winning rows from left to right
winningLine(1,4,7).
winningLine(2,5,8).
winningLine(3,6,9).
%Winning diagnolly
winningLine(7,5,3).
winningLine(9,5,1).
Так что после каждого хода я хочу проверить, была ли сыграна одна из комбинаций выигрышных линий, т.е. содержит ли доска какую-либо из комбинаций выигрышной линии и с игрокомимеет эту комбинацию.Я думал об этом, и здесь можно было бы использовать метод findall, однако я был бы открыт для предложения.
Мой вопрос: Как я могу проверить на доске условия победы?