map.c
author viric@llimona
Sat, 17 Feb 2007 15:14:30 +0100
changeset 28 cd27cb410375
parent 26 95fccfcbd04c
permissions -rw-r--r--
Recursivity changed into a loop. Now the state is loaded on boot, and saved on TERM.
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
8
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    11
static int are_boxes_equal(const struct Position b1[], const struct Position b2[],
6
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    12
	int n)
4
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    13
{
6
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    14
	int i;
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    15
	char tmp[MAX_Y][MAX_X]; /* !!!argh */
4
d9259a605dec A cleaner version, split between different files.
viric@llimona
parents:
diff changeset
    16
26
95fccfcbd04c Less calls to libc. Profiling is much better now.
viric@llimona
parents: 10
diff changeset
    17
	for (i=0; i < n; i++)
95fccfcbd04c Less calls to libc. Profiling is much better now.
viric@llimona
parents: 10
diff changeset
    18
	{
95fccfcbd04c Less calls to libc. Profiling is much better now.
viric@llimona
parents: 10
diff changeset
    19
		tmp[b2[i].y][b2[i].x] = 0;
95fccfcbd04c Less calls to libc. Profiling is much better now.
viric@llimona
parents: 10
diff changeset
    20
	}
6
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    21
	for (i=0; i < n; i++)
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    22
	{
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    23
		tmp[b1[i].y][b1[i].x] = 1;
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    24
	}
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    25
	for (i=0; i < n; i++)
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    26
	{
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    27
		if (tmp[b2[i].y][b2[i].x] != 1)
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    28
			return FALSE;
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    29
	}
bfbca2c0fc70 More file separation.
viric@llimona
parents: 4
diff changeset
    30
	return TRUE;
4
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
10
9148590f009d I made variables explicitily const.
viric@llimona
parents: 8
diff changeset
    33
int is_new_map(const struct Map maps[], const int depth)
8
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    34
{
10
9148590f009d I made variables explicitily const.
viric@llimona
parents: 8
diff changeset
    35
	const struct Map *m = &maps[depth];
8
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    36
	int i;
10
9148590f009d I made variables explicitily const.
viric@llimona
parents: 8
diff changeset
    37
	extern int max_depth; 
8
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    38
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    39
	for(i=0; i<max_depth; i++)
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    40
	{
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    41
		/* No l'hem de comparar amb ell mateix */
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    42
		if (i == depth)
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    43
			continue;
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    44
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    45
		if (m->NumBoxesInPlatform != maps[i].NumBoxesInPlatform)
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    46
			continue;
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    47
		else
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    48
		{
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    49
			if (!are_boxes_equal(m->Box, maps[i].Box, m->NumBoxes))
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    50
				continue;
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    51
		}
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    52
		return FALSE;
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    53
	}
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    54
	return TRUE;
b41a580b3abe The code compiles with pedantic without warnings.
viric@llimona
parents: 6
diff changeset
    55
}