我正在尝试在国际象棋桌上实现主教的可能移动,它可以在随机单元格上有其他棋子。我已经能够绘制一个答案的草图,但它没有检测到其他部分。
在此规则之前,我编写了一些代码,为表格的每个单元格创建如下所示的事实,指示其内容:
(cell-info (coor {i} {j}) (contents {empty|black|white}))
以及一个显示一块位置的事实:
(piece (row {r}) (column {c}) (type {t}) (color {col}))
到目前为止,这是我的规则(可能它也不太有效):
(defrule bishop-moves
(declare (salience 30))
(piece (row ?rb) (column ?cb) (type bishop) (color black))
(cell-info (coor ?i ?j) (contents empty|white))
=>
(loop-for-count (?n 1 8)
(if (or (and (= ?i (+ ?rb ?n)) (= ?j (+ ?cb ?n)))
(and (= ?i (- ?rb ?n)) (= ?j (- ?cb ?n)))
(and (= ?i (+ ?rb ?n)) (= ?j (- ?cb ?n)))
(and (= ?i (- ?rb ?n)) (= ?j (+ ?cb ?n))))
then (assert (movement-allowed
(destination-cell ?i ?j)
(type bishop)
(start-cell ?rb ?cb))))))
有人现在我能做什么吗?提前致谢。