我正在尝试开发游戏。我有一个5x5网格,位于(1,1),(2,1),(2,2),(3,3)中有4个石头,并且位于(3,4)的怪物必须在收集后被杀死4块石头。我的经纪人(铁人)最初位于(1,2)。我的代码如下:
stone(1,1,s0).
stone(2,1,s0).
stone(2,2,s0).
stone(3,3,s0).
ironman(1,2,s0).
ironman(XP,YP,result(A,S)):-
ironman(X,Y,S),
( (A=collect, stone(XP,YP,S), XP=X,YP=Y)
; (A = up, XP is X - 1, XP>=0, YP = Y)
; (A = down, XP is X + 1, XP<5, YP = Y)
; (A = left, YP is Y - 1, YP>=0, XP = X)
; (A = right, YP is Y + 1, YP<5, XP = X)
).
stone(XP,YP,result(A,S)):-
stone(X,Y,S),
( (A = up,XP=X, YP=Y)
; (A = down,XP=X, YP=Y)
; (A = left,XP=X, YP=Y)
; (A = right,XP=X, YP=Y)
; (A=collect, ironman(X2,Y2,S), X2\= X, Y2\=Y,XP=X,YP=X)
).
每当我尝试测试机芯时,它只会收集一次。我想通过将4个宝石添加到列表中来确保收集4个宝石,并每次检查该宝石是否属于此列表,然后将其删除并继续直到收集4个宝石,然后搜索要杀死的怪物。我不知道如何用Prolog做到这一点。请提出建议,或者如果我不介意还有其他更好的方法来获得相同的结果