From bdee2852c13f6b02ec5207ded584839a3118233e Mon Sep 17 00:00:00 2001 From: scratko Date: Tue, 2 Apr 2024 17:43:35 +0300 Subject: Initial commit --- pacman.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 pacman.c (limited to 'pacman.c') diff --git a/pacman.c b/pacman.c new file mode 100644 index 0000000..c3225b2 --- /dev/null +++ b/pacman.c @@ -0,0 +1,78 @@ +#include "field.h" +#include "ghosts.h" +#include "pac.h" +#include +#include +#include + +enum { + timeout_duration = 0, + sleep_duration = 190000, + key_escape = 27, + count_get_out_moves = 5 +}; + +static void pathfinder_stage(game_space field, struct ghost_type *red_ghost, + struct ghost_type *pink_ghost, + struct ghost_type *blue_ghost, + struct ghost_type *orange_ghost) +{ + enum intersection_type intersection; + intersection = get_intersection(field, red_ghost); + if(intersection != direct_path) + redirect(field, intersection, red_ghost, breadth_first_search); +} + +int main() +{ + game_space field = NULL; + struct ghost_type red_ghost, pink_ghost, blue_ghost, orange_ghost; + struct pacman pac; + int key, get_out_stage; + enum movement_direction stored_direction; + stored_direction = none; + get_out_stage = count_get_out_moves; + initscr(); + cbreak(); + noecho(); + curs_set(0); + keypad(stdscr, 1); + timeout(timeout_duration); + start_color(); + field = get_new_field(); + print_field(field); + initialize_ghost(&red_ghost, red); + initialize_ghost(&pink_ghost, pink); + initialize_ghost(&blue_ghost, blue); + initialize_ghost(&orange_ghost, orange); + initialize_pac(&pac); + display_ghosts_on_field(&red_ghost, &pink_ghost, &blue_ghost, + &orange_ghost); + display_character(pac.position.y, pac.position.x, 'C'); + usleep(sleep_duration); + while((key = getch()) != key_escape) { + if(get_out_stage) + pull_out_ghosts(&get_out_stage, &red_ghost, &pink_ghost, + &blue_ghost, &orange_ghost); + else + pathfinder_stage(field, &red_ghost, &pink_ghost, &blue_ghost, + &orange_ghost); + if(key != ERR) + change_pac_direction(field, &pac, key, &stored_direction); + else { + if(stored_direction != none) + check_remaining_direction(field, &pac, &stored_direction); + else + check_remaining_direction(field, &pac, NULL); + } + make_ghost_moves(field, &red_ghost, &pink_ghost, &blue_ghost, + &orange_ghost); + make_pac_move(field, &pac); + display_ghosts_on_field(&red_ghost, &pink_ghost, &blue_ghost, + &orange_ghost); + display_character(pac.position.y, pac.position.x, 'C'); + usleep(sleep_duration); + } + endwin(); + return 0; +} -- cgit v1.2.3