Chess en Jess 2

Hola, hace unos días publique una pregunta sobre realizar los movimientos de un caballo para que se comiera 3 peones en un tablero de ajedrez con Jess. He leído los primeros capítulos de CLIPS y algunos ejemplos de Jess, pero no veo como puedo realizar con una regla el movimiento del caballo y que detecte en una determinada posición si hay peón o no...
Podrías ayudarme, o indicarme como puedo utilizar una regla con tal fin... Ando un poco perdido...
Gracias.
R.
Respuesta
1
Es difícil cambiar la manera de pensar de la programación normal a las reglas.
Para empezar, una sola regla no va a bastar. Vas a necesitar varias, voy a iniciarte el problema y espero que lo puedas terminar.
Esta solución se basa en el ejemplo dilemma. Clp
Lo primero modelar los hechos:
(Deftemplate pieza
(slot parent)
(Slot name)
(Slot x)
(Slot y)
)
; Supuesto que la esquina inferior izquierda del tablero es la (0,0)
; esta regla mueve el caballo 2 cuadros arriba y uno a la derecha
(defrule move-1
?p <- (pieza (name caballo)
(x ?x)
(y ?y))
=>
(duplicate ?p (parent p)
(x (+ ?x 1))
(y (+ ?y 2))))
)
;Restricciones: caballo fuera del tablero.
(defrule move-out
?p <- (pieza (name caballo)
(x ?x&:(< ?x 0)&:(> ?x 8))
(y ?y&:(< ?y 0)&:(> ?y 8)))
=>
(¿Retract?p)
)
; Come peon
(¿Defrule move-1
? Peon <- (pieza (name peon)
(¿x?x)
(¿y?y))
(Pieza (name caballo)
(¿x?x)
(¿y?y))
=>
(¿Retract? Peón)
)
Esto por si solo no va a funcionar ya que habría que completar los movimientos del caballo, y entonces en cuanto hagas un assert de una pieza caballo crea un montón de duplicados que se comerían los peones de forma independiente. Hay que poner más reglas, o/y slots y asignarles prioridades para que los caballos se coman los peones secuencial mente y de esta forma, a través del slot parent, podrías obtener la secuencia de movimientos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas