Пролог - поиск оптимального ответа - крестики-нолики - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь понять, как работает ответ для игры в крестики-нолики.На данный момент у меня есть 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, чтобы найти оптимальный ответ на доске.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...