diff options
author | Jacob Janzen <jacob.a.s.janzen@gmail.com> | 2024-02-12 13:11:18 -0600 |
---|---|---|
committer | Jacob Janzen <jacob.a.s.janzen@gmail.com> | 2024-02-12 13:11:18 -0600 |
commit | 7309765a00c994bfdf576ae72aa295e3dc0ed835 (patch) | |
tree | d99ee61c5ac66ec5060d2eb8ef8b81198418abbc | |
parent | f534c8d2c4cd8c8692cd7d831afb3041cc584c2b (diff) |
implement stairs
-rw-r--r-- | main.c | 64 |
1 files changed, 50 insertions, 14 deletions
@@ -102,6 +102,27 @@ void display_map( wrefresh(win); } +void display_instructions(WINDOW *win) +{ + mvwprintw(win, 1, 2, "h - move left"); + mvwprintw(win, 2, 2, "j - move down"); + mvwprintw(win, 3, 2, "k - move up"); + mvwprintw(win, 4, 2, "l - move right"); + mvwprintw(win, 5, 2, "> - move down staircase"); + mvwprintw(win, 6, 2, "< - exit via staircase"); + wrefresh(win); +} + +void display_message(WINDOW *win, char *msg) +{ + for (int i = 1; i < MESSAGE_PANEL_WIDTH - 1; ++i) { + mvwaddch(win, 1, i, ' '); + } + + mvwprintw(win, 1, 1, msg); + wrefresh(win); +} + int main(void) { initialize(); @@ -125,18 +146,7 @@ int main(void) (COLS - MAIN_PANEL_WIDTH - INSTRUCTION_PANEL_WIDTH) / 2 ); - mvwprintw(inst, 1, 2, "h - move left"); - mvwprintw(inst, 2, 2, "j - move down"); - mvwprintw(inst, 3, 2, "k - move up"); - mvwprintw(inst, 4, 2, "l - move right"); - wrefresh(inst); - - mvwprintw(msgs, 1, 1, "TODO: put messages here"); - wrefresh(msgs); - - wattron(main_win, COLOR_PAIR(1)); - wrefresh(main_win); - + // create the map enum tile_type *map; struct point *open_tiles; int num_open_tiles; @@ -144,6 +154,7 @@ int main(void) struct point down; create_cave(&map, &open_tiles, &num_open_tiles, &up, &down); + // create the camera and player at the up stairs struct entity *entities = malloc(sizeof(struct entity) * MAX_ENTITIES); entities[0].disp_ch = ""; entities[0].name = "camera"; @@ -155,10 +166,14 @@ int main(void) entities[1].ypos = up.y; int num_entities = 2; + // start displaying things display_map(main_win, map, entities, num_entities); + display_instructions(inst); + display_message(msgs, "TODO: put a message here"); - int ch; - while ((ch = getch()) != KEY_F(1)) { + int ch; + bool done = false; + while (!done && (ch = getch()) != KEY_F(1)) { switch (ch) { case 'k' : if (entities[1].ypos > 0) { @@ -192,10 +207,31 @@ int main(void) } } break; + case '>' : + if (map[entities[1].ypos * WIDTH + entities[1].xpos] == + DOWN_STAIR) { + free(map); + free(open_tiles); + create_cave(&map, &open_tiles, &num_open_tiles, &up, &down); + entities[0].xpos = up.x - MAIN_PANEL_WIDTH / 2 + 1; + entities[0].ypos = up.y - MAIN_PANEL_HEIGHT / 2 + 1; + entities[1].xpos = up.x; + entities[1].ypos = up.y; + } + break; + case '<' : + if (map[entities[1].ypos * WIDTH + entities[1].xpos] == UP_STAIR) { + done = true; + } + break; } display_map(main_win, map, entities, num_entities); } + free(map); + free(open_tiles); + free(entities); + endwin(); return 0; |