-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathenemy.c
More file actions
112 lines (102 loc) · 2.04 KB
/
enemy.c
File metadata and controls
112 lines (102 loc) · 2.04 KB
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include "so_long.h"
void kill_enemy(t_vars *vars, int x, int y)
{
int i;
i = 0;
while (i < vars->enemy_count)
{
if (vars->enemies[i].x == x && vars->enemies[i].y == y)
{
vars->enemies[i] = vars->enemies[vars->enemy_count - 1];
vars->enemy_count--;
break ;
}
i++;
}
vars->map[y][x] = '0';
mlx_put_image_to_window(vars->mlx, vars->win,
vars->textures.explosion_img, x * GRID_SIZE, y * GRID_SIZE);
mlx_do_sync(vars->mlx);
usleep(400000);
draw_map(vars);
}
static void show_flint(t_vars *vars)
{
int px;
int py;
px = vars->map_info.player_x;
py = vars->map_info.player_y;
draw_flint(vars, (px + 1), py);
mlx_do_sync(vars->mlx);
usleep(150000);
draw_map(vars);
}
void handle_kill(t_vars *vars)
{
int px;
int py;
show_flint(vars);
px = vars->map_info.player_x;
py = vars->map_info.player_y;
if (vars->map[py - 1][px] == 'V')
kill_enemy(vars, px, py - 1);
else if (vars->map[py + 1][px] == 'V')
kill_enemy(vars, px, py + 1);
else if (vars->map[py][px - 1] == 'V')
kill_enemy(vars, px - 1, py);
else if (vars->map[py][px + 1] == 'V')
kill_enemy(vars, px + 1, py);
}
void init_enemies(t_vars *vars)
{
int i;
int j;
int n;
n = 0;
i = 0;
while (i < vars->map_info.rows && n < MAX_ENEMIES)
{
j = 0;
while (j < vars->map_info.cols && n < MAX_ENEMIES)
{
if (vars->map[i][j] == 'V')
{
vars->enemies[n].x = j;
vars->enemies[n].y = i;
vars->enemies[n].dir_x = 1;
vars->enemies[n].dir_y = 0;
n++;
}
j++;
}
i++;
}
vars->enemy_count = n;
}
void move_enemies(t_vars *vars)
{
int i;
int nx;
int ny;
char next;
i = 0;
while (i < vars->enemy_count)
{
nx = vars->enemies[i].x + vars->enemies[i].dir_x;
ny = vars->enemies[i].y + vars->enemies[i].dir_y;
next = vars->map[ny][nx];
if (next == '1' || next == 'C' || next == 'E' || next == 'P')
{
vars->enemies[i].dir_x *= -1;
vars->enemies[i].dir_y *= -1;
}
else
{
vars->map[vars->enemies[i].y][vars->enemies[i].x] = '0';
vars->enemies[i].x = nx;
vars->enemies[i].y = ny;
vars->map[ny][nx] = 'V';
}
i++;
}
}