
Untitled
By: a guest on
Aug 7th, 2012 | syntax:
Lisp | size: 1.14 KB | hits: 19 | expires: Never
(deftemplate unit "combat unit for game AI"
(slot hitpoints (type NUMBER))
(slot movespeed (type NUMBER))
(slot name)
(multislot attack)
)
(deftemplate attack "combat weapon for game AI"
(slot name)
(slot damage (type NUMBER))
)
(deffacts
(unit
(name infantry-1)
(hitpoints 1)
(movespeed 3)
(attack fire-rifle))
(unit
(name infantry-2)
(hitpoints 1)
(movespeed 3)
(attack fire-rifle))
(unit
(name tank-1)
(hitpoints 10)
(movespeed 1)
(attack fire-20mm fire-rockets))
(attack
(name fire-rifle)
(damage 1))
(attack
(name fire-20mm)
(damage 5))
(attack
(name fire-rockets)
(damage 12))
)
(defrule resolve-attack
(resolve ?unit1 ?attack ?unit2) ;unit1 does attack to unit2
(unit (name ?u1) (hitpoints ?h1) (attack ?attack $?a1) (movespeed ?m1))
(attack (name ?attack) (damage ?d))
?uf1 <- (unit (name ?u1) (hitpoints ?h2) (attack ?attack $?a2) (movespeed ?m1))
=>
(retract ?uf1)
(if (< (- ?h2 ?d) 0) then
(assert ((unit (name ?u1) (hitpoints (- ?h2 ?d)) (attack ?attack $?a2) (movespeed ?m1)))))
)