0

我正在尝试制作类似于扫雷的游戏,并且我正在尝试计算地图上某个点附近的炸弹数量,但它只进入一个 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)
                ).
4

1 回答 1

3

整个方法有点问题,全局变量,复制粘贴而不是使用回溯等。你如何代表整个比赛场地?

无论如何,当 else 命中时, if-else 构造将失败。您需要编写如下内容:

(  if_condition
-> action
;  true
).

如果没有与 else 相关的操作。

但它可能是别的东西,当然......有什么作用map

于 2013-05-15T18:31:14.760 回答