#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);
}