Я пытаюсь понять, как работает ответ для игры в крестики-нолики.На данный момент у меня есть winningLine
факты, которые скажут, если кто-то выиграл игру.Пользователь может ввести позицию, и позиция будет заполнена, после чего Пролог ответит простым фактом.
Я пытаюсь понять, как найти наиболее оптимальный ответ на вход игрока и отправить ответ.
Я думаю об использовании forall
и циклически перебирать каждый пользовательский ввод, чтобы найти наилучшее место для ответа.
Вот что у меня есть относительно игроков:
% Specify the the 2 players and empty space for the board
player(X) :- x(X).
% This will be the computer
player(X) :- o(X).
% This is the blank space that we print out first and if the spot has not
been taken yet
blankSpace(X) :- not(player(X)).
% Print the board 3 rows across by 3 columns wide
buildBoard :- printBox(1),printBox(2),printBox(3),nl,
printBox(4),printBox(5),printBox(6),nl,
printBox(7),printBox(8),printBox(9),nl.
next_move(('[x]','[2]','[3]','[4]','[5]','[6]','[7]','[8]','[9]',8).
next_move(6).
playersMove :-
repeat, write('Your turn, please choose a space between 1-9'),
% Read Input
read(X),
% Check if the number the user (X) entered is between 1 and 9
between(1,9,X),
% Select the numbered blank space the user has specified
blankSpace(X),
% Replace the numbered space with the text for the X player
assert(x(X)).
computerMove :-
next_move(X),
blankSpace(X),
assert(o(X)).
Мой вопрос: как мне найти ввод пользователя и использовать computerMove
, чтобы найти оптимальный ответ на доске.