package equips; import java.io.*; import EDU.gatech.cc.is.util.Vec2; import EDU.gatech.cc.is.abstractrobot.*; import jess.*; public class javajess2 extends ControlSystemSS { public void Configure() { } public int TakeStep() { Vec2 result,ball,jug0=new Vec2(0,0),jug1=new Vec2(); Vec2 array[]; long curr_time = abstract_robot.getTime(); NullDisplay nd = new NullDisplay(); // posicio de la pilota ball = abstract_robot.getBall(curr_time); // posicio dels jugadors array=abstract_robot.getTeammates(curr_time); if (array.length>0) jug1=array[0]; try { Rete jess_engine=new Rete(nd); // passo les dades jess_engine.store("pilotax",new Value(ball.x, RU.FLOAT)); jess_engine.store("pilotay",new Value(ball.y, RU.FLOAT)); jess_engine.store("jugador0x",new Value(jug0.x,RU.FLOAT)); jess_engine.store("jugador0y",new Value(jug0.y,RU.FLOAT)); jess_engine.store("jugador1x",new Value(jug1.x,RU.FLOAT)); jess_engine.store("jugador1y",new Value(jug1.y,RU.FLOAT)); jess_engine.executeCommand("(defrule startup" + " =>" + " (assert (x0 (fetch jugador0x)))" + " (assert (y0 (fetch jugador0y)))" + " (assert (x1 (fetch jugador1x)))" + " (assert (y1 (fetch jugador1y)))" + " (assert (px (fetch pilotax)))" + " (assert (py (fetch pilotay))))"); jess_engine.executeCommand("(defrule calculadist" + " ?a<-(x0 ?x0)" + " ?b<-(y0 ?y0)" + " ?c<-(x1 ?x1)" + " ?d<-(y1 ?y1)" + " ?e<-(px ?px)" + " ?f<-(py ?py)" + " =>" + " (bind ?dist0 (+ (* (- ?x0 ?px) (- ?x0 ?px)) (*(- ?y0 ?py) (- ?y0 ?py))))" + " (bind ?dist1 (+ (* (- ?x1 ?px) (- ?x1 ?px)) (*(- ?y1 ?py) (- ?y1 ?py))))" + " (retract ?a ?b ?c ?d ?e ?f)" + " (assert (dist0 ?dist0))" + " (assert (dist1 ?dist1)))"); jess_engine.executeCommand("(defrule si_jug0" + " ?a<-(dist0 ?d0)" + " ?b<-(dist1 ?d1&:(> ?d1 ?d0))" + " =>" + " (retract ?a ?b)" + " (store ir 0))"); jess_engine.executeCommand("(defrule si_jug1" + " ?a<-(dist0 ?d0)" + " ?b<-(dist1 ?d1&:(<= ?d1 ?d0))" + " =>" + " (retract ?a ?b)" + " (store ir 1))"); jess_engine.reset(); jess_engine.run(); // segons la decisio presa executo una accio o altra if (jess_engine.fetch("ir").intValue()==0) { // fem que el robot apunti a la pilota abstract_robot.setSteerHeading(curr_time, ball.t); // que vagi corren abstract_robot.setSpeed(curr_time, 1.0); // que xuti si pot if (abstract_robot.canKick(curr_time)) abstract_robot.kick(curr_time); } else { // fem que el robot apunti a la porteria abstract_robot.setSteerHeading(curr_time, abstract_robot.getOurGoal(curr_time).t); // que vagi corren abstract_robot.setSpeed(curr_time, 1.0); } } catch (ReteException re) { re.printStackTrace(nd.stderr()); } // tell the parent we're OK return(CSSTAT_OK); } }