2014-03-31 4 views
0

나는 테스 게임을 Jess 언어로 만들고 있는데이 알고리즘을 사용하여 T 조각을 회전시켰다.테트리스 회전 T 조각 Jess

(defrule rotateTPiece 
?g<-(piece (id 4) (x1 ?x1) (y1 ?y1) 
        (x2 ?x2) (y2 ?y2) 
        (x3 ?x3) (y3 ?y3) 
        (x4 ?x4) (y4 ?y4)) 
=> 
(bind ?lowerx (min ?x1 ?x2 ?x3 ?x4)) 
(bind ?lowery (min ?y1 ?y2 ?y3 ?y4)) 

(modify ?g 
(x1 (- ?x1 ?lowerx)) (y1 (- ?y1 ?lowery)) 
(x2 (- ?x2 ?lowerx)) (y2 (- ?y2 ?lowery)) 
(x3 (- ?x3 ?lowerx)) (y3 (- ?y3 ?lowery)) 
(x4 (- ?x4 ?lowerx)) (y4 (- ?y4 ?lowery))) 

(modify ?g 
(x1 ?y1) (y1 (- 1 (- ?x1 1))) 
(x2 ?y2) (y2 (- 1 (- ?x2 1))) 
(x3 ?y3) (y3 (- 1 (- ?x3 1))) 
(x4 ?y4) (y4 (- 1 (- ?x4 1)))) 

(modify ?g 
    (x1 (+ ?x1 ?lowerx)) (y1 (+ ?y1 ?lowery)) 
    (x2 (+ ?x2 ?lowerx)) (y2 (+ ?y2 ?lowery)) 
    (x3 (+ ?x3 ?lowerx)) (y3 (+ ?y3 ?lowery)) 
    (x4 (+ ?x4 ?lowerx)) (y4 (+ ?y4 ?lowery))) 

(focus VISUAL)) 

처음에 내가 그때 회전을 만들기 위해이를 수정 한 다음 나는 inicial 위치로 변환, 원점에 조각을 번역 수정합니다. 이유는 모르겠지만 작동하지 않습니다.

답변

0

슬롯 바인딩은 값을 기준으로하므로? x1은 오른쪽이 입력 된 시간의 슬롯 x1 값을 나타냅니다. 제를 교체하고 제 수정 패턴

(bind ?tx1 (- ?x1 ?lowerx)) 

(bind ?ux1 ?tx1) 

마지막 수정을 사용

(modify ?g 
(x1 (+ ?ux1 ?lowerx)) ...) 
진다