如何创建具有特定坐标的列表,并在到达每个坐标后删除每个坐标?

时间:2019-11-14 12:01:37

标签: prolog

我正在尝试开发游戏。我有一个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做到这一点。请提出建议,或者如果我不介意还有其他更好的方法来获得相同的结果

0 个答案:

没有答案