--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/map.c Fri May 05 23:43:20 2006 +0200
@@ -0,0 +1,122 @@
+#include <stdio.h>
+#include <stdio.h>
+#include <string.h>
+#include "general.h"
+
+void CopyMap (struct Map *Mdest, const struct Map *Morig)
+{
+ memcpy((void *) Mdest, (void *) Morig, sizeof (struct Map));
+}
+
+void ReadMap(struct Map *M, char *FileName)
+{
+ FILE *Fitxer;
+ int i,j;
+
+ if(!(Fitxer = fopen(FileName, "r")))
+ {
+ printf("Error opening %s!", FileName);
+ exit(1);
+ }
+
+ M->SizeX=0;
+ M->SizeY=0;
+ while (!feof(Fitxer))
+ {
+ fgets(M->Cells[M->SizeY], MAX_X, Fitxer);
+ M->SizeY++;
+ }
+ M->SizeY--;
+ M->SizeX = strlen(M->Cells[0]) - 1;
+
+ M->NumPlatforms = 0;
+ M->NumBoxesInPlatform = 0;
+ M->NumBoxes = 0;
+ for (j = 0; j<M->SizeY; j++)
+ for (i=0; i<M->SizeX; i++)
+ {
+ if (M->Cells[j][i] == MAN)
+ {
+ M->Man.x = i; M->Man.y = j;
+ M->Cells[M->Man.y][M->Man.x] = BLANK;
+ }
+
+ if (M->Cells[j][i] == PLATFORM)
+ M->NumPlatforms++;
+ else if (M->Cells[j][i] == BOXINPLATFORM)
+ {
+ M->Cells[j][i] = PLATFORM;
+
+ M->NumPlatforms++;
+ M->NumBoxesInPlatform++;
+
+ M->Box[M->NumBoxes].x = i;
+ M->Box[M->NumBoxes].y = j;
+ M->NumBoxes++;
+ } else if (M->Cells[j][i] == BOX)
+ {
+ M->Cells[j][i] = BLANK;
+
+ M->Box[M->NumBoxes].x = i;
+ M->Box[M->NumBoxes].y = j;
+ M->NumBoxes++;
+ } else if (M->Cells[j][i] == CORNER)
+ {
+ M->Cells[j][i] = CORNER;
+ } else if (M->Cells[j][i] != WALL)
+ {
+ if ( (M->Cells[j][i-1] == WALL &&
+ M->Cells[j-1][i] == WALL) ||
+ (M->Cells[j][i-1] == WALL &&
+ M->Cells[j+1][i] == WALL) ||
+ (M->Cells[j][i+1] == WALL &&
+ M->Cells[j-1][i] == WALL) ||
+ (M->Cells[j][i+1] == WALL &&
+ M->Cells[j+1][i] == WALL))
+ M->Cells[j][i] = CORNER;
+ }
+
+ }
+
+}
+
+
+void ShowMap (const struct Map *M)
+{
+ struct Map Temp;
+ int i,j;
+
+ CopyMap(&Temp, M);
+
+ Temp.Cells[Temp.Man.y][Temp.Man.x] = MAN;
+
+ for (i = 0; i < Temp.NumBoxes; i++)
+ {
+ if (Temp.Cells[Temp.Box[i].y][Temp.Box[i].x] == PLATFORM)
+ Temp.Cells[Temp.Box[i].y][Temp.Box[i].x] =BOXINPLATFORM;
+ else
+ Temp.Cells[Temp.Box[i].y][Temp.Box[i].x] = BOX;
+ }
+
+ for (j = 0; j<Temp.SizeY; j++)
+ {
+ for (i=0; i<Temp.SizeX; i++)
+ fprintf(stderr,"%c", Temp.Cells[j][i]);
+ fprintf(stderr,"\n");
+ }
+
+#if 0
+ // Print Where the man can move
+ for (j = 0; j<Temp.SizeY; j++)
+ {
+ for (i=0; i<Temp.SizeX; i++)
+ printf("%c", Temp.ManMoves[j][i]);
+ printf("\n");
+ }
+#endif
+
+ printf("Man is at (%i,%i)\n", Temp.Man.x, Temp.Man.y);
+ printf("Platforms: %i, BoxesInPlatform: %i\n", Temp.NumPlatforms,
+ Temp.NumBoxesInPlatform);
+
+}