(IN-PACKAGE "NISP") (deftype ball (structure X Y - float) (conser (type - symbol) (make ^^ 0.0 0.0))) (deftype body (structure type - symbol X Y O - float) (conser (type - symbol) (make ^^ type 0.0 0.0 0.0))) (deftype percept (LST observation)) (deftype observation (structure type - symbol X Y - float) (conser (type - symbol) (make ^^ type 0.0 0.0))) (deftype belief-state (LST obj)) (SPECDECL (ROBOTS* ()) - (LST (LRCD symbol robot))) (DEFPROC RESET-ROBOTS - boolean () (!= ROBOTS* ()) '#T) (DEFFUNC NAME->ROBOT - (~ robot) (NAME - symbol) (LET ((ROBOT-ENTRY (ASSOC NAME ROBOTS*)) - (~ (LRCD symbol robot))) (COND ((NOT (NULL ROBOT-ENTRY)) (SECOND ROBOT-ENTRY)) (T NIL)))) (deftype robot forward) (DEFFUNC ->ROBOT-NAME (PLAYER-NUMBER - integer TEAM - symbol) (INTERN (FORMAT NIL "~a-~a" TEAM PLAYER-NUMBER))) (DEFPROC PLACE-ROBOT - boolean (ROBOT-NAME - symbol X Y O - float) (LET ((ROBOT (NAME->ROBOT ROBOT-NAME)) - (~ robot)) (COND ((NULL ROBOT) (EARROR PLACE-ROBOT NIL "~a is not a valid robot name!!!" ROBOT-NAME)) (T (LET ((ROBOT-BODY (!_BODY ROBOT)) - body) (!= GAME-SITUATION* (CONS ROBOT *-*)) (!= (!_X ROBOT-BODY) X) (!= (!_Y ROBOT-BODY) Y) (!= (!_O ROBOT-BODY) O))))) '#T) (SPECDECL (GAME-SITUATION* ()) - (LST robot)) (DEFPROC RESET-GAME-SITUATION - boolean () (!= GAME-SITUATION* ()) '#T) (DEFMACRO GAME-SITUATION (&REST BODY) (MATCH-COND BODY ?(((WITH-TEAMS (?TEAM1 ?TYPE1) (?TEAM2 ?TYPE2) . ?PLACEMENTS)) `(LET () (MAPELTDO (\\ (IND) (MAKE ROBOT IND ',TEAM1 ',TYPE1)) '(1 2 3 4)) (MAPELTDO (\\ (IND) (MAKE ROBOT IND ',TEAM2 ',TYPE2)) '(1 2 3 4)) (RESET-GAME-SITUATION) (MAPELTDO (\\ (PLACEMENT) (APPLY #'PLACE-ROBOT PLACEMENT)) ',PLACEMENTS)))))