-
Notifications
You must be signed in to change notification settings - Fork 0
/
fill_area.c
86 lines (79 loc) · 2.4 KB
/
fill_area.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* fill_area.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: rvan-der <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2017/02/20 18:32:00 by rvan-der #+# #+# */
/* Updated: 2017/02/20 19:26:46 by rvan-der ### ########.fr */
/* */
/* ************************************************************************** */
#include "filler.h"
int ennemi_coll(t_coord pos, t_plateau p)
{
t_coord *pc;
int ret;
ret = 0;
pc = (p.pce).crd;
while (pc != NULL)
{
if ((pos.x + pc->x + 1 < (p.size).x && \
is_ennemi((p.map)[pos.y + pc->y][pos.x + pc->x + 1], p.pl)) \
|| (pos.x + pc->x - 1 >= 0 && \
is_ennemi((p.map)[pos.y + pc->y][pos.x + pc->x - 1], p.pl)) \
|| (pos.y + pc->y + 1 < (p.size).y && \
is_ennemi((p.map)[pos.y + pc->y + 1][pos.x + pc->x], p.pl)) \
|| (pos.y + pc->y - 1 >= 0 && \
is_ennemi((p.map)[pos.y + pc->y - 1][pos.x + pc->x], p.pl)))
ret++;
pc = pc->next;
}
return (ret);
}
int collisions(t_coord pos, t_plateau p)
{
t_coord *pc;
int ret;
ret = 0;
pc = (p.pce).crd;
while (pc != NULL)
{
if ((pos.x + pc->x + 1 < (p.size).x && \
(p.map)[pos.y + pc->y][pos.x + pc->x + 1] == p.pl) \
|| (pos.x + pc->x - 1 >= 0 && \
(p.map)[pos.y + pc->y][pos.x + pc->x - 1] == p.pl) \
|| (pos.y + pc->y + 1 < (p.size).y && \
(p.map)[pos.y + pc->y + 1][pos.x + pc->x] == p.pl) \
|| (pos.y + pc->y - 1 >= 0 && \
(p.map)[pos.y + pc->y - 1][pos.x + pc->x] == p.pl))
ret++;
pc = pc->next;
}
return (ret);
}
t_skin fill_area(t_plateau p)
{
t_skin ret;
t_coord *tmp;
t_coord max;
t_coord coll;
max.x = 0;
max.y = 0;
tmp = p.pos;
while (tmp != NULL)
{
if (!max.x && (coll.y = collisions(*tmp, p)) > max.y)
{
max.y = coll.y;
ret.crd = *tmp;
}
if ((coll.x = ennemi_coll(*tmp, p)) > max.x)
{
max.x = coll.x;
ret.crd = *tmp;
}
tmp = tmp->next;
}
return (ret);
}