俄罗斯方块旋转T片杰斯

时间:2014-03-31 17:18:41

标签: jess

我正在用Jess语言制作一个俄罗斯方块游戏,我已经制作了这个算法来旋转T片。

(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位置。我不知道为什么,但这不起作用。

1 个答案:

答案 0 :(得分:0)

插槽绑定是按值计算的,因此?x1指的是输入右侧时插槽x1中的值。使用模式

替换第一次和第二次修改
(bind ?tx1 (- ?x1 ?lowerx))

(bind ?ux1 ?tx1)   

,最后一次修改变为

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