back to scratko.xyz
aboutsummaryrefslogtreecommitdiff
path: root/pacman.c
diff options
context:
space:
mode:
Diffstat (limited to 'pacman.c')
-rw-r--r--pacman.c78
1 files changed, 78 insertions, 0 deletions
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 <ncurses.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+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;
+}