viric@4: #define BOX '$' viric@4: #define WALL '#' viric@4: #define MAN '@' viric@4: #define PLATFORM '.' viric@4: #define BOXINPLATFORM '*' viric@4: #define MANINPLATFORM 'E' viric@4: #define BLANK ' ' viric@4: #define CORNER '-' viric@4: #define MANCANMOVE '+' viric@4: viric@8: /* #define DEBUG */ viric@4: viric@4: enum viric@4: { viric@4: ALARM_SECONDS=1, viric@4: MAX_X=50, viric@4: MAX_Y=50, viric@4: MAX_MOVES=50, viric@4: MAX_STEPS=50, viric@4: MAX_BOXES=15 viric@4: }; viric@4: viric@4: viric@4: enum logic viric@4: { viric@4: TRUE=1, viric@8: FALSE=0 viric@4: }; viric@4: viric@4: struct Position viric@4: { viric@4: int x; viric@4: int y; viric@4: }; viric@4: viric@4: struct Map viric@4: { viric@4: char Cells[MAX_Y][MAX_X]; viric@4: char cells_boxes[MAX_Y][MAX_X]; viric@4: char man_moves[MAX_Y][MAX_X]; viric@4: int SizeX, SizeY; viric@4: struct Position Man; viric@4: int NumPlatforms; viric@4: int NumBoxesInPlatform; viric@4: struct Position Box[MAX_BOXES]; viric@4: int NumBoxes; viric@4: }; viric@4: viric@4: viric@4: viric@4: enum e_direction viric@4: { viric@4: DIR_LEFT, viric@4: DIR_RIGHT, viric@4: DIR_DOWN, viric@4: DIR_UP viric@4: }; viric@4: viric@4: static const struct Position move_vectors[4] = { viric@4: {0, 1}, viric@4: {0, -1}, viric@4: {1, 0}, viric@4: {-1, 0}}; viric@4: viric@4: struct BoxMove viric@4: { viric@4: int box; viric@4: struct Position dir; viric@4: }; viric@4: viric@4: viric@9: /* Prototypes for map managing viric@9: * map.c */ viric@4: void CopyMap (struct Map *Mdest, const struct Map *Morig); viric@10: int is_new_map(const struct Map maps[], const int depth); viric@6: viric@9: /* Prototypes for unix i/o, processes viric@9: * os.c */ viric@4: void ReadMap(struct Map *M, char *FileName); viric@4: void ShowMap (const struct Map *M); viric@6: void init_os(); viric@6: void PrintMove(struct BoxMove b); viric@6: viric@9: /* Functions related to map solution viric@9: * algorithm.c */ viric@6: int solve_map(const struct Map origin);