#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 = 2, 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, pink_shift = 4, blue_shift = 2, orange_search_limit = 8 }; 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; int frightened_status; 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); struct queue; 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, struct queue *eaten_coins); struct pacman; void redirect(game_space field, enum intersection_type paths, struct ghost_type *ghost, struct coordinates target_point, void (*pathfinder)(game_space, struct ghost_type*, struct coordinates target_point)); void random_redirect(game_space field, struct ghost_type *ghost); void breadth_first_search(game_space field, struct ghost_type *ghost, struct coordinates target_point); void compute_distance_between_points(game_space field, struct ghost_type *ghost, struct coordinates target_point); struct coordinates identify_target_in_front(struct pacman pac, int shift); struct coordinates identify_blue_target(struct pacman pac, const struct ghost_type *red_ghost); void reverse_all_ghosts(struct ghost_type *red_ghost, struct ghost_type *pink_ghost, struct ghost_type *blue_ghost, struct ghost_type *orange_ghost); #endif