map.c
author viric@llimona
Sat, 06 May 2006 00:33:47 +0200
changeset 5 9d1e320acbb0
parent 4 d9259a605dec
child 6 bfbca2c0fc70
permissions -rw-r--r--
Adding -Wall to ldflags
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     1
#include <stdio.h>
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     2
#include <stdio.h>
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     3
#include <string.h>
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     4
#include "general.h"
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     5
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     6
void CopyMap (struct Map *Mdest, const struct Map *Morig)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     7
{
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     8
	memcpy((void *) Mdest, (void *) Morig, sizeof (struct Map));
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
     9
}
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    10
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    11
void ReadMap(struct Map *M, char *FileName)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    12
{
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    13
	FILE *Fitxer;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    14
	int i,j;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    15
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    16
	if(!(Fitxer = fopen(FileName, "r")))
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    17
	{
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    18
		printf("Error opening %s!", FileName);
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    19
		exit(1);
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    20
	}
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    21
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    22
	M->SizeX=0;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    23
	M->SizeY=0;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    24
	while (!feof(Fitxer))
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    25
	{
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    26
		fgets(M->Cells[M->SizeY], MAX_X, Fitxer);
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    27
		M->SizeY++;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    28
	}
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    29
	M->SizeY--;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    30
	M->SizeX = strlen(M->Cells[0]) - 1;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    31
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    32
	M->NumPlatforms = 0;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    33
	M->NumBoxesInPlatform = 0;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    34
	M->NumBoxes = 0;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    35
	for (j = 0; j<M->SizeY; j++)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    36
		for (i=0; i<M->SizeX; i++)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    37
		{
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    38
			if (M->Cells[j][i] == MAN)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    39
			{ 
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    40
				M->Man.x = i; M->Man.y = j; 
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    41
				M->Cells[M->Man.y][M->Man.x] = BLANK;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    42
			}
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    43
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    44
			if (M->Cells[j][i] == PLATFORM)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    45
				M->NumPlatforms++;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    46
			else if (M->Cells[j][i] == BOXINPLATFORM)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    47
			{
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    48
				M->Cells[j][i] = PLATFORM;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    49
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    50
				M->NumPlatforms++;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    51
				M->NumBoxesInPlatform++;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    52
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    53
				M->Box[M->NumBoxes].x = i;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    54
				M->Box[M->NumBoxes].y = j;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    55
				M->NumBoxes++;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    56
			} else if (M->Cells[j][i] == BOX)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    57
			{
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    58
				M->Cells[j][i] = BLANK;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    59
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    60
				M->Box[M->NumBoxes].x = i;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    61
				M->Box[M->NumBoxes].y = j;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    62
				M->NumBoxes++;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    63
			} else if (M->Cells[j][i] == CORNER)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    64
			{
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    65
				M->Cells[j][i] = CORNER;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    66
			} else if (M->Cells[j][i] != WALL)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    67
			{
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    68
				if (    (M->Cells[j][i-1] == WALL &&
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    69
					 M->Cells[j-1][i] == WALL) ||
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    70
					(M->Cells[j][i-1] == WALL &&
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    71
					 M->Cells[j+1][i] == WALL) ||
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    72
					(M->Cells[j][i+1] == WALL &&
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    73
					 M->Cells[j-1][i] == WALL) ||
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    74
					(M->Cells[j][i+1] == WALL &&
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    75
					 M->Cells[j+1][i] == WALL))
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    76
				M->Cells[j][i] = CORNER;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    77
			}
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    78
				
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    79
		}
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    80
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    81
}
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    82
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    83
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    84
void ShowMap (const struct Map *M)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    85
{
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    86
	struct Map Temp;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    87
	int i,j;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    88
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    89
	CopyMap(&Temp, M);
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    90
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    91
	Temp.Cells[Temp.Man.y][Temp.Man.x] = MAN;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    92
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    93
	for (i = 0; i < Temp.NumBoxes; i++)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    94
	{
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    95
		if (Temp.Cells[Temp.Box[i].y][Temp.Box[i].x] == PLATFORM)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    96
			Temp.Cells[Temp.Box[i].y][Temp.Box[i].x] =BOXINPLATFORM;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    97
		else
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    98
			Temp.Cells[Temp.Box[i].y][Temp.Box[i].x] = BOX;
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    99
	}
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   100
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   101
	for (j = 0; j<Temp.SizeY; j++)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   102
	{
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   103
		for (i=0; i<Temp.SizeX; i++)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   104
			fprintf(stderr,"%c", Temp.Cells[j][i]);
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   105
		fprintf(stderr,"\n");
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   106
	}
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   107
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   108
#if 0
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   109
	// Print Where the man can move
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   110
	for (j = 0; j<Temp.SizeY; j++)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   111
	{
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   112
		for (i=0; i<Temp.SizeX; i++)
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   113
			printf("%c", Temp.ManMoves[j][i]);
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   114
		printf("\n");
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   115
	}
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   116
#endif
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   117
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   118
	printf("Man is at (%i,%i)\n", Temp.Man.x, Temp.Man.y);
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   119
	printf("Platforms: %i, BoxesInPlatform: %i\n", Temp.NumPlatforms,
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   120
			Temp.NumBoxesInPlatform);
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   121
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
   122
}