Newer
Older
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
#include "custom_map.h"
#include "input_manager.h"
const char *str_map1 =
"\
+---------------+\n\
| M @|\n\
| M |\n\
| M |\n\
| M |\n\
| --------------|\n\
| >| | | | |\n\
+---------------+\n\
";
//5 UP 12 RIGHT
const char *str_map2 =
"\
+---------------+\n\
|> |\n\
| |\n\
| |\n\
| M M |\n\
| @ |\n\
| M M |\n\
+---------------+\n\
";
// 4 DOWN 7 RIGHT
const char *str_map3 = // the monster can move two tiles for 1 movement of the player + follow him
"\
+---------------+\n\
| |\n\
|M| > |\n\
| | |\n\
| |\n\
| | | |\n\
| +-+ |\n\
| @ |\n\
+---------------+\n\
";
// initialize the monsters : first stat : id, direction and coordinates
monsters* init_monsters(map * m, monsters* monsters_data){
monsters_data->length = 0;
for (int y = 0; y < m->height; y++)
{
for(int x = 0; x<m->width; x++){
if (m->tiles[y][x] == 'M') {;
monsters_data->info[monsters_data->length].id = monsters_data->length;
monsters_data->info[monsters_data->length].dir = DIR_DOWN;
monsters_data->info[monsters_data->length].x = x;
monsters_data->info[monsters_data->length].y = y;
monsters_data->info[monsters_data->length].player_seen = false;
monsters_data->length++;
}
}
}
for (int i = monsters_data->length; i < MAX_MONSTERS; i++)
{
monsters_data->info[i].id = -1;
}
return monsters_data;
}
void show_map(map *m) {
for (int y = 0; y < m->height; y++)
{
for(int x = 0; x<m->width; x++){
printf("%c", m->tiles[y][x]);
}
printf("\n");
}
}
void update_monster(monsters* mon, map* m, int fy, int fx, int ty, int tx) {
if (m->tiles[fy][fx] == 'M' && can_move_to(m, fy, fx, ty, tx)) {
move_without_check(m, fy, fx, ty, tx);
int id = search_monster(mon, m, fy, fx);
if (fx < tx)
mon->info[id].dir = DIR_RIGHT;
else if (fx>tx)
mon->info[id].dir = DIR_LEFT;
else if (fy<ty)
mon->info[id].dir = DIR_DOWN;
else
mon->info[id].dir = DIR_UP;
mon->info[id].x = tx;
mon->info[id].y = ty;
}
}
void verify_monster(game_instance* game, monsters* mon) {
map *m = current_map(game->map_stack);
if (m->tiles[m->player_y][m->player_x] == 'M') {
message("A monster catches you !");
exit(EXIT_FAILURE);
}
}