old/sokosold.c
author viric@llimona
Fri, 05 May 2006 23:20:33 +0200
changeset 3 29cc57a9678e
parent 0 sokosold.c@be33ecaa3619
permissions -rw-r--r--
Moving the files to appropiate locations.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
     1
#include <stdio.h>
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
     2
#include <string.h>
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
     3
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
     4
#define BOX '$'
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
     5
#define WALL '#'
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
     6
#define MAN '@'
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
     7
#define PLATFORM '.'
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
     8
#define BOXINPLATFORM '*'
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
     9
#define MANINPLATFORM 'E'
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    10
#define BLANK ' '
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    11
#define CANTO '-'
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    12
#define MANCANMOVE '+'
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    13
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    14
#define NBOX(n) ((n)<<2)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    15
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    16
#define DIR_LEFT 0
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    17
#define DIR_RIGHT 1
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    18
#define DIR_UP 2
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    19
#define DIR_DOWN 3
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    20
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    21
#define MAX_X 50
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    22
#define MAX_Y 50
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    23
#define MAX_MOVES 50
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    24
#define MAX_BOXES 15
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    25
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    26
#define MOVE_OK		1
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    27
#define MOVE_BOX	2
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    28
#define MOVE_ILLEGAL	0
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    29
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    30
/* SOKOBAN Solution Finder
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    31
 *
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    32
 * Cerca totes les possibilitats de tots els nombres de combinacions possibles,
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    33
 * menys la que tots els moviments són a l'esquerra del número de combinacions
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    34
 * incials triat.
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    35
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    36
 * 13/01/2002
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    37
 * Comentari afegit el 4/01/2003:
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    38
 * Cerca la solució segons el moviment de caixes, i no el de l'home.
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    39
 * Falta optimitzar: Llocs on no posar caixes segons les caixes (són dinàmics
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    40
 * segons cada element de l'array de mapes!)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    41
 */
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    42
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    43
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    44
struct Map
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    45
{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    46
	char Cells[MAX_Y][MAX_X];
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    47
	char ManMoves[MAX_Y][MAX_X];
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    48
	int SizeX, SizeY;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    49
	int ManX, ManY;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    50
	int NumPlatforms;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    51
	int NumBoxesInPlatform;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    52
	int BoxX[MAX_BOXES];
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    53
	int BoxY[MAX_BOXES];
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    54
	int NumBoxes;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    55
};
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    56
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    57
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    58
void CopyMap (struct Map *Mdest, struct Map *Morig)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    59
{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    60
	memcpy((void *) Mdest, (void *) Morig, sizeof (struct Map));
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    61
}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    62
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    63
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    64
void ReadMap(struct Map *M, char *FileName)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    65
{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    66
	FILE *Fitxer;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    67
	int i,j;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    68
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    69
	if(!(Fitxer = fopen(FileName, "r")))
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    70
	{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    71
		printf("Error opening %s!", FileName);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    72
		exit(1);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    73
	}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    74
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    75
	M->SizeX=0;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    76
	M->SizeY=0;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    77
	while (!feof(Fitxer))
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    78
	{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    79
		fgets(M->Cells[M->SizeY], MAX_X, Fitxer);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    80
		M->SizeY++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    81
	}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    82
	M->SizeY--;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    83
	M->SizeX = strlen(M->Cells[0]) - 1;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    84
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    85
	M->NumPlatforms = 0;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    86
	M->NumBoxesInPlatform = 0;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    87
	M->NumBoxes = 0;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    88
	for (j = 0; j<M->SizeY; j++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    89
		for (i=0; i<M->SizeX; i++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    90
		{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    91
			if (M->Cells[j][i] == MAN)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    92
			{ 
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    93
				M->ManX = i; M->ManY = j; 
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    94
				M->Cells[M->ManY][M->ManX] = BLANK;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    95
			}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    96
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    97
			if (M->Cells[j][i] == PLATFORM)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    98
				M->NumPlatforms++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
    99
			else if (M->Cells[j][i] == BOXINPLATFORM)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   100
			{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   101
				M->Cells[j][i] = PLATFORM;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   102
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   103
				M->NumPlatforms++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   104
				M->NumBoxesInPlatform++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   105
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   106
				M->BoxX[M->NumBoxes] = i;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   107
				M->BoxY[M->NumBoxes] = j;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   108
				M->NumBoxes++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   109
			} else if (M->Cells[j][i] == BOX)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   110
			{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   111
				M->Cells[j][i] = BLANK;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   112
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   113
				M->BoxX[M->NumBoxes] = i;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   114
				M->BoxY[M->NumBoxes] = j;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   115
				M->NumBoxes++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   116
			} else if (M->Cells[j][i] != WALL)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   117
			{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   118
				if (    (M->Cells[j][i-1] == WALL &&
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   119
					 M->Cells[j-1][i] == WALL) ||
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   120
					(M->Cells[j][i-1] == WALL &&
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   121
					 M->Cells[j+1][i] == WALL) ||
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   122
					(M->Cells[j][i+1] == WALL &&
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   123
					 M->Cells[j-1][i] == WALL) ||
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   124
					(M->Cells[j][i+1] == WALL &&
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   125
					 M->Cells[j+1][i] == WALL))
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   126
				M->Cells[j][i] = CANTO;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   127
			}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   128
				
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   129
		}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   130
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   131
}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   132
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   133
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   134
void ShowMap (struct Map *M)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   135
{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   136
	struct Map Temp;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   137
	int i,j;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   138
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   139
	CopyMap(&Temp, M);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   140
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   141
	Temp.Cells[Temp.ManY][Temp.ManX] = MAN;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   142
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   143
	for (i = 0; i < Temp.NumBoxes; i++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   144
	{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   145
		if (Temp.Cells[Temp.BoxY[i]][Temp.BoxX[i]] == BLANK)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   146
			Temp.Cells[Temp.BoxY[i]][Temp.BoxX[i]] = BOX;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   147
		else if (Temp.Cells[Temp.BoxY[i]][Temp.BoxX[i]] == PLATFORM)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   148
			Temp.Cells[Temp.BoxY[i]][Temp.BoxX[i]] = BOXINPLATFORM;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   149
	}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   150
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   151
	for (j = 0; j<Temp.SizeY; j++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   152
	{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   153
		for (i=0; i<Temp.SizeX; i++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   154
			printf("%c", Temp.Cells[j][i]);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   155
		printf("\n");
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   156
	}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   157
	// Print Where the man can move
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   158
	for (j = 0; j<Temp.SizeY; j++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   159
	{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   160
		for (i=0; i<Temp.SizeX; i++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   161
			printf("%i", Temp.ManMoves[j][i]);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   162
		printf("\n");
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   163
	}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   164
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   165
	printf("Man is at (%i,%i)\n", Temp.ManX, Temp.ManY);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   166
	printf("Platforms: %i, BoxesInPlatform: %i\n", Temp.NumPlatforms,
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   167
			Temp.NumBoxesInPlatform);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   168
}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   169
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   170
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   171
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   172
int InverseMove(char Dir1, char Dir2)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   173
{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   174
	if ((Dir1 + Dir2 == DIR_LEFT + DIR_RIGHT) ||
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   175
		(Dir1 + Dir2 == DIR_UP + DIR_DOWN))
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   176
		return 1;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   177
	return 0;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   178
}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   179
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   180
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   181
void GetManMoves(struct Map *M)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   182
{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   183
	int X[MAX_MOVES], Y[MAX_MOVES];
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   184
	int NewX[MAX_MOVES], NewY[MAX_MOVES];
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   185
	int NumMoves, NewMoves;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   186
	int j, i;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   187
	
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   188
	NumMoves = 1;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   189
	for (j = 0; j<M->SizeY; j++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   190
		for (i=0; i<M->SizeX; i++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   191
			M->ManMoves[j][i] = (M->Cells[j][i] == WALL)?WALL:BLANK;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   192
	for (i = 0; i<M->NumBoxes; i++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   193
		M->ManMoves[M->BoxY[i]][M->BoxX[i]] = WALL;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   194
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   195
	NewMoves = 1;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   196
	NewX[0] = M->ManX;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   197
	NewY[0] = M->ManY;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   198
	while (NewMoves)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   199
	{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   200
		NumMoves = NewMoves;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   201
		for (i=0; i<NewMoves; i++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   202
		{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   203
			X[i] = NewX[i];
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   204
			Y[i] = NewY[i];
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   205
		}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   206
		NewMoves = 0;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   207
		for (i=0; i<NumMoves; i++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   208
		{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   209
			if(M->ManMoves[Y[i]][X[i]-1] == BLANK)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   210
			{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   211
				NewX[NewMoves] = X[i]-1;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   212
				NewY[NewMoves] = Y[i];
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   213
				M->ManMoves[Y[i]][X[i]-1] = MANCANMOVE;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   214
				NewMoves++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   215
			}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   216
			else if(M->ManMoves[Y[i]][X[i]+1] == BLANK)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   217
			{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   218
				NewX[NewMoves] = X[i]+1;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   219
				NewY[NewMoves] = Y[i];
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   220
				M->ManMoves[Y[i]][X[i]+1] = MANCANMOVE;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   221
				NewMoves++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   222
			}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   223
			else if(M->ManMoves[Y[i]-1][X[i]] == BLANK)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   224
			{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   225
				NewX[NewMoves] = X[i];
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   226
				NewY[NewMoves] = Y[i]-1;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   227
				M->ManMoves[Y[i]-1][X[i]] = MANCANMOVE;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   228
				NewMoves++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   229
			}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   230
			else if(M->ManMoves[Y[i]+1][X[i]] == BLANK)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   231
			{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   232
				NewX[NewMoves] = X[i];
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   233
				NewY[NewMoves] = Y[i]+1;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   234
				M->ManMoves[Y[i]+1][X[i]] = MANCANMOVE;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   235
				NewMoves++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   236
			}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   237
		}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   238
	}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   239
}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   240
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   241
int MoveBox(struct Map *M, int NumBox, int Direction)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   242
{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   243
	char InPlatform;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   244
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   245
	InPlatform = (M->Cells[M->BoxY[NumBox]][M->BoxX[NumBox]] == PLATFORM);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   246
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   247
	switch(Direction)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   248
	{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   249
		case DIR_LEFT:
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   250
			if(M->ManMoves[M->BoxY[NumBox]][M->BoxX[NumBox]+1] ==
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   251
				MANCANMOVE)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   252
			{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   253
				if(InPlatform)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   254
					M->NumBoxesInPlatform--;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   255
				M->BoxX[NumBox]--;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   256
				if(M->Cells[M->BoxY[NumBox]][M->BoxX[NumBox]] ==
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   257
					PLATFORM)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   258
					M->NumBoxesInPlatform++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   259
				return 1;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   260
			}else return 0;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   261
			break;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   262
		case DIR_RIGHT:
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   263
			if(M->ManMoves[M->BoxY[NumBox]][M->BoxX[NumBox]-1] ==
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   264
				MANCANMOVE)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   265
			{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   266
				if(InPlatform)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   267
					M->NumBoxesInPlatform--;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   268
				M->BoxX[NumBox]++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   269
				if(M->Cells[M->BoxY[NumBox]][M->BoxX[NumBox]] ==
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   270
					PLATFORM)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   271
					M->NumBoxesInPlatform++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   272
				return 1;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   273
			}else return 0;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   274
			break;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   275
		case DIR_UP:
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   276
			if(M->ManMoves[M->BoxY[NumBox]-1][M->BoxX[NumBox]] ==
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   277
				MANCANMOVE)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   278
			{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   279
				if(InPlatform)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   280
					M->NumBoxesInPlatform--;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   281
				M->BoxY[NumBox]--;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   282
				if(M->Cells[M->BoxY[NumBox]][M->BoxX[NumBox]] ==
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   283
					PLATFORM)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   284
					M->NumBoxesInPlatform++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   285
				return 1;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   286
			}else return 0;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   287
			break;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   288
		case DIR_DOWN:
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   289
			if(M->ManMoves[M->BoxY[NumBox]+1][M->BoxX[NumBox]] ==
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   290
				MANCANMOVE)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   291
			{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   292
				if(InPlatform)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   293
					M->NumBoxesInPlatform--;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   294
				M->BoxY[NumBox]++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   295
				if(M->Cells[M->BoxY[NumBox]][M->BoxX[NumBox]] ==
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   296
					PLATFORM)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   297
					M->NumBoxesInPlatform++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   298
				return 1;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   299
			}else return 0;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   300
			break;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   301
	}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   302
	return 0;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   303
}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   304
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   305
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   306
int main(int argn, char **argv)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   307
{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   308
	struct Map Morigin;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   309
	struct Map M[MAX_MOVES+1];
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   310
	int Moves[MAX_MOVES];
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   311
	int NumMoves;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   312
	int OldMaps;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   313
	int IllegalMove;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   314
	int Carry;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   315
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   316
	int i;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   317
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   318
	if (argn != 3)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   319
	{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   320
		printf("Usage: %s <mapfile> <initial NumMoves>\n", argv[0]);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   321
		exit(3);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   322
	}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   323
	ReadMap(&Morigin, argv[1]);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   324
	sscanf(argv[2], "%i", &NumMoves);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   325
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   326
	ShowMap(&Morigin);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   327
	
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   328
	for (i = 0; i < NumMoves; i++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   329
		Moves[i] = NBOX(0) + DIR_LEFT;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   330
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   331
	// Reget the original map
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   332
	CopyMap(&M[0], &Morigin);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   333
	CopyMap(&M[NumMoves], &Morigin);	// For the first while cond.
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   334
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   335
	GetManMoves(&M[0]);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   336
	ShowMap(&Morigin);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   337
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   338
	IllegalMove = NumMoves - 1;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   339
	// Process the combination
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   340
	for (i = 0; i < NumMoves; i++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   341
	{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   342
		CopyMap(&M[i+1], &M[i]);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   343
		if (!MoveBox(&M[i+1], Moves[i]>>2, Moves[i] & 0x03))
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   344
		{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   345
			IllegalMove = i;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   346
			break;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   347
		}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   348
	}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   349
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   350
	// Main solution finder loop
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   351
	while (M[NumMoves].NumPlatforms != M[NumMoves].NumBoxesInPlatform)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   352
	{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   353
		// Increase the Counter
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   354
		{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   355
			Carry = 1;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   356
			// Reset the direction of sure-invalid moves
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   357
			for (i = IllegalMove + 1; i < NumMoves; i++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   358
				Moves[i] = NBOX(0) + DIR_LEFT;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   359
			// Increase Counter for a new try of moves
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   360
			for (i = IllegalMove; i >= 0 && Carry; i--)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   361
			{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   362
				Moves[i]++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   363
				Carry = 0;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   364
				if (Moves[i] ==NBOX(M[0].NumBoxes-1)+DIR_DOWN+1)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   365
				{ Moves[i] = NBOX(0) + DIR_LEFT; Carry = 1; }
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   366
			}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   367
			OldMaps = i+1;	// Sure? I think it's i+1
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   368
			// If we change the number of movements for solution
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   369
			if (Carry)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   370
			{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   371
				if (NumMoves > MAX_MOVES)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   372
					break;	// MAX MOVES EXCEEDED!!!
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   373
				NumMoves++;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   374
				for (i = 0; i < NumMoves; i++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   375
					Moves[i] = NBOX(0) + DIR_LEFT;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   376
				OldMaps=0;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   377
				CopyMap(&M[NumMoves], &Morigin);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   378
					// For the first while cond.
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   379
				printf("Provant %i moviments...\n", NumMoves);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   380
			}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   381
		}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   382
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   383
/*
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   384
		// Print the combination
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   385
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   386
		for (i=0; i < NumMoves; i++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   387
		{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   388
			printf("%c", Moves[i]);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   389
		}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   390
		printf("\n");
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   391
*/
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   392
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   393
		IllegalMove = NumMoves - 1;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   394
		// Process the combination
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   395
		for (i = OldMaps; i < NumMoves - 1; i++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   396
		{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   397
			CopyMap(&M[i+1], &M[i]);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   398
			if (!MoveBox(&M[i+1], Moves[i]>>2, Moves[i] & 0x03))
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   399
			{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   400
				IllegalMove = i;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   401
				break;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   402
			} /*else
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   403
			if (((Moves[i] + Moves[i-1] == DIR_LEFT + DIR_RIGHT) ||
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   404
				(Moves[i] + Moves[i-1] == DIR_UP + DIR_DOWN)) &&
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   405
				!M[i].BoxMoved)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   406
			{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   407
				IllegalMove = i;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   408
				break;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   409
			}*/
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   410
			GetManMoves(&M[i+1]);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   411
				
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   412
		}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   413
		// Here i = NumMoves - 1
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   414
		CopyMap(&M[i+1], &M[i]);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   415
		if (!MoveBox(&M[i+1], Moves[i]>>2, Moves[i] & 0x03))
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   416
			IllegalMove = i;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   417
					
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   418
	}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   419
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   420
	// Print the combination
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   421
	for (i=0; i < NumMoves; i++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   422
	{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   423
		printf("%i", Moves[i] >> 2);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   424
		if ((Moves[i] & 0x03) == DIR_LEFT)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   425
			printf("L");
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   426
		else if ((Moves[i] & 0x03) == DIR_RIGHT)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   427
			printf("R");
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   428
		else if ((Moves[i] & 0x03) == DIR_UP)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   429
			printf("U");
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   430
		else
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   431
			printf("D");
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   432
		printf(",");
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   433
	}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   434
	printf("\n");
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   435
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   436
/*
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   437
	// Print The Steps
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   438
	for (i=0; i < NumMoves; i++)
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   439
	{
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   440
		ShowMap(&M[i]);
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   441
	}
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   442
*/
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   443
	return 0;
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   444
be33ecaa3619 Initial commit.
viric@llimona
parents:
diff changeset
   445
}