使用Prolog解决游戏“斑点”

时间:2019-10-12 19:59:53

标签: prolog

因此,我的老师给我一个保证,对我来说,这似乎超出了我的学习范围,或者至少是在我的课堂上,也许是因为我们几乎没有实践过序言,所以我要做的就是编写一个序言程序来解决“ mindgames”页面上的game Blobs,我想我可以在python或C ++上执行此操作,因为我熟悉此代码,但是我一点都不熟悉prolog,我在很多方面都在努力。这就是我应该做的:

  1. 有一个功能可以告诉我什么是油漆的,什么不是。
  2. 递归搜索所有已知邻居的所有可能路径 应该画。
  3. 限制行动。将选择的颜色(或移动)保存在我应打印为答案的列表中。

最近我所做的是在网络上搜索如何制作列表,如何使用矩阵以及实际上试图了解其工作原理。但是序言没有以我容易理解的方式记录在案。我的老师说我应该这样解决问题:

  1. 扩展搜索范围,并在开始时标记具有相同颜色的eveyone。
  2. 画出你可以的邻居。
  3. 将其保存在列表中以打印
  4. 以递归方式进行

从互联网上,我找到了nighborgs,以及如何将列表索引到矩阵中,但是仅此而已,我想我不了解prolog如何做到这一点。

我有什么,我不知道这是否可以解决我的问题

:- 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

谢谢。

0 个答案:

没有答案
相关问题