// Planner.c // // Version Date Author Description // -------------------------------------------------------------------------- // 0.01 24/06/01 BWW Initial implementation #include #include "planner.h" #include "pad.h" #include "funcprototypes.h" // Define the buffers volatile u_char *bb0, *bb1; // Low Complexity char Environment[ENV_HEIGHT][ENV_WIDTH] = {{{OBJ_FLAT },{OBJ_DOWN },{OBJ_DOWN },{OBJ_WATER },{OBJ_UP },{OBJ_UP },{OBJ_UP },{OBJ_FLAT },{OBJ_FLAT },{OBJ_FLAT }}, {{OBJ_FLAT },{OBJ_DOWN },{OBJ_DOWN },{OBJ_WATER },{OBJ_WATER },{OBJ_UP },{OBJ_UP },{OBJ_UP },{OBJ_FLAT },{OBJ_FLAT }}, {{OBJ_DOWN },{OBJ_FLAT },{OBJ_DOWN },{OBJ_DOWN },{OBJ_WATER },{OBJ_UP },{OBJ_UP },{OBJ_UP },{OBJ_FLAT },{OBJ_FLAT }}, {{OBJ_UP },{OBJ_FLAT },{OBJ_DOWN },{OBJ_DOWN },{OBJ_WATER },{OBJ_UP },{OBJ_UP },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER }}, {{OBJ_FLAT },{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_FLAT },{OBJ_FLAT }}, {{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_WATER },{OBJ_DOWN },{OBJ_DOWN },{OBJ_DOWN },{OBJ_WATER },{OBJ_UP },{OBJ_UP }}, {{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_UP },{OBJ_FLAT },{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_UP },{OBJ_UP }}, {{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_UP },{OBJ_FLAT },{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_FLAT },{OBJ_FLAT }}, {{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_WATER },{OBJ_UP },{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_FLAT },{OBJ_FLAT }}, {{OBJ_FLAT },{OBJ_DOWN },{OBJ_DOWN },{OBJ_WATER },{OBJ_UP },{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_FLAT },{OBJ_FLAT }}}; // Medium Complexity //char Environment[ENV_HEIGHT][ENV_WIDTH] = // {{{OBJ_FLAT },{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_DOWN },{OBJ_FLAT },{OBJ_FLAT },{OBJ_DOWN },{OBJ_DOWN },{OBJ_WATER }}, // {{OBJ_FLAT },{OBJ_WALL },{OBJ_DOWN },{OBJ_WATER },{OBJ_DOWN },{OBJ_WALL },{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_WATER }}, // {{OBJ_DOWN },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_FLAT },{OBJ_WALL },{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_FLAT }}, // {{OBJ_DOWN },{OBJ_WATER },{OBJ_DOWN },{OBJ_FLAT },{OBJ_FLAT },{OBJ_WALL },{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_FLAT }}, // {{OBJ_DOWN },{OBJ_WATER },{OBJ_DOWN },{OBJ_FLAT },{OBJ_WALL },{OBJ_WALL },{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_FLAT }}, // {{OBJ_FLAT },{OBJ_WATER },{OBJ_DOWN },{OBJ_DOWN },{OBJ_WALL },{OBJ_DOWN },{OBJ_DOWN },{OBJ_DOWN },{OBJ_WATER },{OBJ_FLAT }}, // {{OBJ_FLAT },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_FLAT }}, // {{OBJ_UP },{OBJ_UP },{OBJ_WALL },{OBJ_DOWN },{OBJ_WALL },{OBJ_DOWN },{OBJ_WATER },{OBJ_FLAT },{OBJ_FLAT },{OBJ_FLAT }}, // {{OBJ_FLAT },{OBJ_UP },{OBJ_FLAT },{OBJ_FLAT },{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_FLAT },{OBJ_FLAT },{OBJ_FLAT }}, // {{OBJ_UP },{OBJ_UP },{OBJ_WALL },{OBJ_FLAT },{OBJ_WALL },{OBJ_DOWN },{OBJ_WATER },{OBJ_FLAT },{OBJ_FLAT },{OBJ_FLAT }}}; // High Complexity //char Environment[ENV_HEIGHT][ENV_WIDTH] = // {{{OBJ_FLAT },{OBJ_FLAT },{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_DOWN },{OBJ_WALL },{OBJ_DOWN },{OBJ_WATER },{OBJ_FLAT }}, // {{OBJ_FLAT },{OBJ_DOWN },{OBJ_WALL },{OBJ_DOWN },{OBJ_WATER },{OBJ_DOWN },{OBJ_WALL },{OBJ_DOWN },{OBJ_WATER },{OBJ_FLAT }}, // {{OBJ_DOWN },{OBJ_WATER },{OBJ_WALL },{OBJ_DOWN },{OBJ_WATER },{OBJ_DOWN },{OBJ_FLAT },{OBJ_DOWN },{OBJ_WATER },{OBJ_FLAT }}, // {{OBJ_FLAT },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER }}, // {{OBJ_UP },{OBJ_WALL },{OBJ_DOWN },{OBJ_DOWN },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_DOWN },{OBJ_WALL },{OBJ_FLAT }}, // {{OBJ_FLAT },{OBJ_WALL },{OBJ_FLAT },{OBJ_FLAT },{OBJ_DOWN },{OBJ_DOWN },{OBJ_WATER },{OBJ_DOWN },{OBJ_FLAT },{OBJ_FLAT }}, // {{OBJ_FLAT },{OBJ_FLAT },{OBJ_FLAT },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_WATER },{OBJ_WALL },{OBJ_WALL },{OBJ_FLAT }}, // {{OBJ_FLAT },{OBJ_WALL },{OBJ_FLAT },{OBJ_WATER },{OBJ_FLAT },{OBJ_FLAT },{OBJ_DOWN },{OBJ_UP },{OBJ_WALL },{OBJ_FLAT }}, // {{OBJ_FLAT },{OBJ_WALL },{OBJ_WATER },{OBJ_WATER },{OBJ_WALL },{OBJ_WALL },{OBJ_FLAT },{OBJ_UP },{OBJ_FLAT },{OBJ_FLAT }}, // {{OBJ_FLAT },{OBJ_FLAT },{OBJ_WATER },{OBJ_FLAT },{OBJ_FLAT },{OBJ_FLAT },{OBJ_FLAT },{OBJ_UP },{OBJ_WALL },{OBJ_FLAT }}}; // Create instances of structures Agent_Struct Agent; Key_Struct Key; Start_Struct Start; Exit_Struct Exit; Door_Struct Door[10]; Bridge_Struct Bridge[10]; Route_Struct Route; SearchTree_Struct SearchTree; SearchGoalNodes_Struct SearchGoalNodes; Preconditions_Struct Preconditions; Effects_Struct Effects; UnmetPreconditions_Struct UnmetPreconditions; ActionEffects_Struct ActionEffects; CausalLinks_Struct CausalLinks; Orderings_Struct Orderings; Plan_Struct Plan; Metrics_Struct Metrics; //AvailablePrecons_Struct AvailablePrecons; //AvailableActions_Struct AvailableActions; // Global variables for search routines ..... Temporary measure to get over parameter passing problems int startx, starty,destinationx, destinationy; // Flag whether to print Debug information int Debug = false; int up,down,left,right; u_long timecount; // Standard Text char TurnMsg[] = "TURN\n"; char StepMsg[] = "STEP\n"; char PlanMsg[] = "PLAN OK\n"; char NoPlanMsg[] = "NO PLAN\n"; char FailedPlanMsg[] = "FAILED PLAN\n"; long Turn = 0; char RouteMsg[] = "ROUTES\n"; char GoalMsg[] = "GOAL SUCCESS\n"; char NotGoalMsg[] = "NOT GOAL\n"; char NoActionMsg[] = "NO ACTION\n"; char MoveToMsg[] = "MOVETO\n"; char UnlockMsg[] = "UNLOCK\n"; char OpenMsg[] = "OPEN\n"; char PickupMsg[] = "PICKUP\n"; char WaitMsg[] = "WAIT\n"; char PlanActionMsg[] = "PLAN\n"; char ComplexityLowMsg[] = "LOW COMPLEX\n"; char ComplexityMediumMsg[] = "MED COMPLEX\n"; char ComplexityHighMsg[] = "HIGH COMPLEX\n"; char SpeedLowMsg[] = "LOW SPEED\n"; char SpeedMediumMsg[] = "MED SPEED\n"; char SpeedHighMsg[] = "HIGH SPEED\n"; char StartLocationMsg[] = "START\n"; // Speed and complexity of the dynamic environment int EnvSpeed; int EnvComplexity; int EnvStartLocation; int BRIDGENUM; int DOORNUM; // Sprite structure GsSPRITE MessageSprite; //u_long GetCounter(); //static long CheckPad (); //u_long PadRead(); // Which buffer variable int activeBuff; // Define the packet work area PACKET GpuPacketArea[2][PACKETMAX2]; // Ordering table variables GsOT WorldOT[2]; GsOT_TAG OTTags[2][1<