Я реализовал Phutball в CLIPS. Я не знаю, почему, но у меня такое чувство, что у меня есть избыточные, «опасные» вещи, написанные здесь. Я отправлю часть программ и надеюсь, что вы поможете мне немного почистить или сделать ее более компактной. Хотя программа работает и проходит все тесты, мне по-прежнему нужен еще один набор глаз.CLIPS очистка кода
Вот шаблон мира:
(deftemplate world
(multislot limit) ; max size (width, height)
(multislot ball) ; the ball
(multislot men) ; positions one after another, x y -,
(slot id) ; id for world
(multislot moves) ; moves list , null at start
(slot coord) ; coordinates for next move
)
Моих координаты такова:
(deffacts coordinates "Direction"
(coord 1 0 D)
(coord -1 0 U)
(coord 0 -1 L)
(coord 0 1 R)
(coord -1 -1 UL)
(coord -1 1 UR)
(coord 1 -1 DL)
(coord 1 1 DR)
)
И вот одна из моих функций движения, который проверяет, если положение оленьей кожи у мужчин на него, он не может идти дальше.
(defrule blocked_move
(coord ?gox ?goy ?poz)
?f <-(myWorld
(limit $?l)
(ball ?x ?y)
(men $?men)
(id ?curent)
(moves $?mutari)
(coord ?poz)
)
;no position to go next
(not (myWorld
(limit $?l)
(ball ?x ?y)
(men $?start ?mx &:(eq (+ ?x ?gox) ?mx) ?my &:(eq (+ ?y ?goy) ?my) - $?end)
(id ?curent)
(moves $?mutari)
(coord ?poz)
))
=>
;go back to a position with no direction
(retract ?f)
(assert(myWorld
(limit $?l)
(ball (+ ?x ?gox) (+ ?y ?goy))
(men $?men)
(id ?curent)
(moves $?mutari (+ ?x ?gox) (+ ?y ?goy) -)
(coord NULL)
))
)
У меня есть еще одна функция движения (что движется до тех пор, пока игроки перепрыгивать), но выше, одна беспокоит меня. Если вы знакомы с Philosopher's Football или просто хорошим программистом CLIPS, я надеюсь, что вы можете мне немного помочь. Спасибо