viric@6: #include viric@6: #include viric@6: #include viric@6: #include viric@6: #include viric@6: #include viric@6: #include "general.h" viric@6: viric@6: /* Things related to the showing of the status */ viric@6: float percent_to_show = 0; viric@6: int depth_to_show = 0; viric@6: viric@6: int max_depth = 0; viric@6: int min_depth_period = 0; viric@6: int max_depth_period = 0; viric@25: struct Map * actual_map = NULL; viric@6: viric@6: viric@6: void ReadMap(struct Map *M, char *FileName) viric@6: { viric@6: FILE *Fitxer; viric@6: int i,j; viric@6: viric@6: if(!(Fitxer = fopen(FileName, "r"))) viric@6: { viric@6: printf("Error opening %s!", FileName); viric@6: exit(1); viric@6: } viric@6: viric@6: M->SizeX=0; viric@6: M->SizeY=0; viric@6: while (!feof(Fitxer)) viric@6: { viric@6: fgets(M->Cells[M->SizeY], MAX_X, Fitxer); viric@6: M->SizeY++; viric@6: } viric@6: M->SizeY--; viric@6: M->SizeX = strlen(M->Cells[0]) - 1; viric@6: viric@6: M->NumPlatforms = 0; viric@6: M->NumBoxesInPlatform = 0; viric@6: M->NumBoxes = 0; viric@6: for (j = 0; jSizeY; j++) viric@6: for (i=0; iSizeX; i++) viric@6: { viric@6: if (M->Cells[j][i] == MAN) viric@6: { viric@6: M->Man.x = i; M->Man.y = j; viric@6: M->Cells[M->Man.y][M->Man.x] = BLANK; viric@6: } viric@6: viric@6: if (M->Cells[j][i] == PLATFORM) viric@6: M->NumPlatforms++; viric@6: else if (M->Cells[j][i] == BOXINPLATFORM) viric@6: { viric@6: M->Cells[j][i] = PLATFORM; viric@6: viric@6: M->NumPlatforms++; viric@6: M->NumBoxesInPlatform++; viric@6: viric@6: M->Box[M->NumBoxes].x = i; viric@6: M->Box[M->NumBoxes].y = j; viric@6: M->NumBoxes++; viric@6: } else if (M->Cells[j][i] == BOX) viric@6: { viric@6: M->Cells[j][i] = BLANK; viric@6: viric@6: M->Box[M->NumBoxes].x = i; viric@6: M->Box[M->NumBoxes].y = j; viric@6: M->NumBoxes++; viric@6: } else if (M->Cells[j][i] == CORNER) viric@6: { viric@6: M->Cells[j][i] = CORNER; viric@6: } else if (M->Cells[j][i] != WALL) viric@6: { viric@6: if ( (M->Cells[j][i-1] == WALL && viric@6: M->Cells[j-1][i] == WALL) || viric@6: (M->Cells[j][i-1] == WALL && viric@6: M->Cells[j+1][i] == WALL) || viric@6: (M->Cells[j][i+1] == WALL && viric@6: M->Cells[j-1][i] == WALL) || viric@6: (M->Cells[j][i+1] == WALL && viric@6: M->Cells[j+1][i] == WALL)) viric@6: M->Cells[j][i] = CORNER; viric@6: } viric@6: viric@6: } viric@6: viric@6: } viric@6: viric@6: viric@6: void ShowMap (const struct Map *M) viric@6: { viric@6: struct Map Temp; viric@6: int i,j; viric@6: viric@6: CopyMap(&Temp, M); viric@6: viric@6: Temp.Cells[Temp.Man.y][Temp.Man.x] = MAN; viric@6: viric@6: for (i = 0; i < Temp.NumBoxes; i++) viric@6: { viric@6: if (Temp.Cells[Temp.Box[i].y][Temp.Box[i].x] == PLATFORM) viric@6: Temp.Cells[Temp.Box[i].y][Temp.Box[i].x] =BOXINPLATFORM; viric@6: else viric@6: Temp.Cells[Temp.Box[i].y][Temp.Box[i].x] = BOX; viric@6: } viric@6: viric@6: for (j = 0; j