Решающая игра "Blobs" с прологом - PullRequest
0 голосов
/ 12 октября 2019

Итак, мой учитель дает мне предположение, что мне кажется, что он не из этого мира или, по крайней мере, из моего класса, и, может быть, это потому, что мы едва практиковались с прологом, я должен написать прологическую программу, которая решаетBlob игры со страницы "Mindgames", я думаю, что я мог бы сделать это на Python или C ++, потому что я знаком с этими кодами, но я совсем не знаком с прологом, я много борюсь. Вот что, я думаю, я должен сделать:

  1. Имеет функцию, которая сообщает мне, что было нарисовано, а что нет.
  2. Рекурсивно искать все возможные пути известных соседей, которые я долженпокрасить.
  3. Сделать ограничение ходов. Сохраните выбранный цвет (или ход) в списке, который я должен напечатать в качестве ответа.

В последнее время я поискал в Интернете, как составить список, как использовать матрицу ина самом деле пытается понять, как это работает. Но пролог документирован не так, как мне легко понять. Мой учитель сказал, что я должен отделить проблему следующим образом:

  1. Расширьте поиск и отметьте всех, у кого будет тот же цвет в начале.
  2. Нарисуйте соседей, которые вы можете.
  3. Сохранить это в списке для печати
  4. Сделать это рекурсивно

Из Интернета я нашел способ найти соседей и как индексировать список в матрице,но это все, я не думаю, что понимаю, как пролог работает для этого.

Что у меня есть, и я не знаю, сработает ли это для моей проблемы

:- use_module(library(clpfd)).

% at, permite indexar la matriz
at(Mat, [Row, Col], Val) :- 
    nth1(Row, Mat, ARow), 
    nth1(Col, ARow, Val).

% indices, generador de indices de la matriz
add(X,L,Ls) :- 
    Ls = [X|[L]].
indices1(L,X,Ls)   :- 
    maplist(add(X),L,Ls).
indices2(L1,L2,Li) :- 
    maplist(indices1(L2),L1,Ls), 
    append(Ls,Li).
indices(M,N,Is) :- 
    numlist(1,M,LMs), 
    numlist(1,N,LNs), 
    indices2(LMs,LNs,Is).

% vecino, posiciones vecinas de [X,Y]
% vecino([X,Y],[X,Y1]) :- Y1 #= Y+1.
% vecino([X,Y],[X,Y1]) :- Y1 #= Y-1.
% vecino([X,Y],[X1,Y]) :- X1 #= X+1.
% vecino([X,Y],[X1,Y]) :- X1 #= X-1.
vecino([X,Y],[X1,Y1]) :- abs(X-X1)+abs(Y-Y1) #= 1. % compact

Заранее спасибо.

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