back to scratko.xyz
aboutsummaryrefslogtreecommitdiff
path: root/ghosts.h
blob: 405a5e2d29893e6be81446365ce7142ba35fc7e8 (plain)
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
#ifndef GHOSTS_H_SENTRY
#define GHOSTS_H_SENTRY

#include "field.h"

enum {
    red_y = 14,
    red_x = 15,
    red_home_y = -1,
    red_home_x = 25,
    pink_y = red_y + 1,
    pink_x = red_x - 2,
    pink_home_y = red_home_y,
    pink_home_x = 1,
    blue_y = red_y,
    blue_x = red_x-1,
    blue_home_y = 29,
    blue_home_x = 27,
    orange_y = red_y + 1,
    orange_x = red_x - 3,
    orange_home_y = blue_home_y,
    orange_home_x = 0,
    field_size = 29
};

enum ghost_color { red, pink, blue, orange };
enum behavior_mode { chase, scatter, frightened };
enum movement_direction { left, right, up, down, none };

struct coordinates {
    int y;
    int x;
};

struct ghost_type {
    struct coordinates position;
    struct coordinates home_position;
    enum ghost_color color;
    enum behavior_mode mode;
    enum movement_direction direction;
};

void initialize_ghost(struct ghost_type *ghost, enum ghost_color color);

void pull_out_ghosts(int *get_out_stage,
                     struct ghost_type *red_ghost, 
                     struct ghost_type *pink_ghost,
                     struct ghost_type *blue_ghost, 
                     struct ghost_type *orange_ghost);

void make_ghost_moves(game_space field,
                      struct ghost_type *red_ghost,
                      struct ghost_type *pink_ghost,
                      struct ghost_type *blue_ghost,
                      struct ghost_type *orange_ghost);

void redirect(game_space field, enum intersection_type paths, 
              struct ghost_type *ghost,
              void (*pathfinder)(game_space field, enum intersection_type paths,
                                 struct ghost_type *ghost));

void breadth_first_search(game_space field, enum intersection_type paths,
                          struct ghost_type *ghost);

#endif