2013-05-15 3 views
0

게임을 지뢰밭과 비슷하게 만들려고 노력 중이며 맵 근처에있는 폭탄의 수를 계산하려고합니다. 그러나 countneighbour 만 입력하면 멈 춥니 다. 다른 countneighbor 술어를 입력하게 만드시겠습니까?SWI-Prolog 술어가 호출되지 않았습니다.

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

'map' 술어는 무엇입니까? 그리고 정말로, 글로벌 변수? –

답변

2

전체 접근 방식은 역 추적을 사용하는 대신 전역 변수, 복사 붙여 넣기 등 약간의 의문이 있습니다. 어떻게 전체 경기장을 나타 냅니까?

어쨌든 else-hit가 발생하면 if-else 구문은 실패합니다. else와 연관된 동작이없는 경우

( if_condition 
-> action 
; true 
). 

과 같은 내용을 작성해야합니다.

하지만 뭔가 다른 것이 될 수 있습니다 ... map의 기능은 무엇입니까?

+0

나는 map/3을 지뢰밭이라고 생각한다. – CapelliC

+0

@CapelliC 나는 역시 그렇게 생각한다. 그러나 정의가 없다면 countneyighs의 Z 값이 무엇인지 알 수있는 방법이 없다. –

+0

다른 것을 true로 설정하면 문제가 해결된다.지도는 SWI-Prolog에서 사전 정의 된 용어를 사용하여 예를 들어 크기, 크기 (2,2)를 설정하고지도, map (2,2, 'a'), map (1,2, 'b') 등 –

관련 문제