0

マインスイーパに似たゲームを作成しようとしています。マップ上のポイントの近くにある爆弾の数を数えようとしていますが、1 つの countneighbor に入るだけで停止します。他の 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 に関連付けられたアクションがない場合。

しかし、もちろんそれは別のものかもしれません... What does mapdo?

于 2013-05-15T18:31:14.760 に答える