不调用SWI-Prolog谓词

时间:2013-05-15 16:49:55

标签: prolog

我正在尝试制作类似于扫雷的游戏,我正在尝试计算地图上某点附近的炸弹数量,但它只进入一个countneighbour并停止,我怎么能让它进入其他countneighbor谓词?

checkneighbours(X,Y) :- nb_setval(vecini,0),
        X1 is X-1,
        X2 is X+1,
        Y1 is Y-1,
        Y2 is Y+1,
        countneighbours(X1,Y),
        countneighbours(X1,Y1),
        countneighbours(X1,Y2),
        countneighbours(X,Y1),
        countneighbours(X,Y2),
        countneighbours(X2,Y1),
        countneighbours(X2,Y),
        countneighbours(X2,Y2),
        nb_getval(V,vecini),
         write(V).

countneighbours(X,Y) :- map(X,Y,Z),
                ( Z=:= "O"
                        -> nb_getval(V,vecini),
                        V1 is V+1,
                        nb_setval(vecini,V1)
                ).

1 个答案:

答案 0 :(得分:2)

整个方法有点可疑,全局变量,复制粘贴而不是使用反向跟踪等。你如何代表整个竞技场?

无论如何,当else命中时,if-else结构将失败。你需要写一些类似的东西:

(  if_condition
-> action
;  true
).

如果没有与else关联的动作。

但它可能是别的东西,当然...... map做了什么?