#include #include #include #include #include #include "map.h" #include "structs.h" #include "config.h" #include "error.h" #include "priority_queue.h" /* So, TODO for now: - Implement Dijkstra and greedy-best-first search algorithms - Implement the A* algorithm - Implement it with 4 and 8 directions - Implement adding maps from files (with rle, preferably) - Implement controls (to change maps, move start/goal, etc.) - Clean up unused `#include`s */ void sigint_handler(int sig) { (void)sig; /* We know it's a SIGINT */ endwin(); printf("Received SIGINT\n"); exit(1); } void initialize_colors(void) { start_color(); use_default_colors(); init_pair(EMPTY_COLOR, COLOR_BLACK, -1); init_pair(GOAL_COLOR, COLOR_RED, -1); init_pair(WALL_COLOR, COLOR_WHITE, COLOR_WHITE); /* Using white as bg makes them seem solid */ init_pair(START_COLOR, COLOR_RED, -1); } int main(void) { signal(SIGINT, sigint_handler); initscr(); /* Initialize the ncurses screen */ cbreak(); /* Process input one char at a time */ curs_set(0); /* Hide the cursor */ noecho(); /* Don't echo characters */ initialize_colors(); /* FIXME: shitty. sometimes leaves enough space on the right for a bigger map */ /* size_t height = LINES/2 - DRAW_MAP_OFFSET_Y, width = COLS/4 - 1; Map map = rbt_maze_map(width, height, (unsigned int) time(NULL)); Position fake_start_position_to_pass_into_draw_map = {0, 0}; Position fake_goal_position_to_pass_into_draw_map = {width*2-2, height*2-2}; */ size_t width, height; Position start_pos, end_pos; Map map = file_plaintext_map("maps/test", &width, &height, &start_pos, &end_pos); int offset_x = 0, offset_y = 0; while (1) { draw_map(map, width, height, offset_x, offset_y, start_pos, end_pos); char c = getch(); switch (c) { case 'h': offset_x -= 2; break; case 'l': offset_x += 2; break; case 'j': offset_y += 1; break; case 'k': offset_y -= 1; break; /* case 'n': FIXME: free it before generating a new one map = rbt_maze_map(width, height, (unsigned int) time(NULL)); break; */ case 'q': endwin(); return 0; } } endwin(); return 0; }