我正在尝试制作类似于扫雷的游戏,我正在尝试计算地图上某点附近的炸弹数量,但它只进入一个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)
).
答案 0 :(得分:2)
整个方法有点可疑,全局变量,复制粘贴而不是使用反向跟踪等。你如何代表整个竞技场?
无论如何,当else命中时,if-else结构将失败。你需要写一些类似的东西:
( if_condition
-> action
; true
).
如果没有与else关联的动作。
但它可能是别的东西,当然...... map
做了什么?