X-Git-Url: https://plomlompom.com/repos/berlin_corona.txt?a=blobdiff_plain;f=roguelike.c;h=fc4f5d16f511e44f01ade0c31cd692ede62d4ecf;hb=9eab10241df1b871d23c5eb6da896b39048b39c8;hp=7d535bc9221b7ea446ad2f1128570ade548ad017;hpb=493ae380d5200e00b8648fcb334e39148126676f;p=plomrogue diff --git a/roguelike.c b/roguelike.c index 7d535bc..fc4f5d1 100644 --- a/roguelike.c +++ b/roguelike.c @@ -24,6 +24,7 @@ struct KeysWinData { int select; }; struct World { + int turn; struct KeyBinding * keybindings; struct KeysWinData * keyswindata; }; @@ -104,7 +105,8 @@ void draw_map (struct Win * win) { void draw_info (struct Win * win) { // Draw info window by appending win->data integer value to "Turn: " display. - int count = * (int *) win->data; + struct World world = * (struct World *) win->data; + int count = world.turn; char text[100]; snprintf(text, 100, "Turn: %d", count); draw_with_linebreaks(win, text, 0); } @@ -135,9 +137,9 @@ struct Map init_map () { map.cells[(8 * map.width) + 3] = 'X'; return map; } -void update_info (struct Win * win) { +void update_info (struct World * world) { // Update info data by incrementing turn value. - * (int *) win->data = * (int *) win->data + 1; } + world->turn++; } void update_log (struct Win * win, char * text) { // Update log with new text to be appended. @@ -331,10 +333,10 @@ int main () { struct Map map = init_map(); win_map.data = ↦ + world.turn = 0; struct Win win_info = init_window(&win_meta, "Info"); win_info.draw = draw_info; - win_info.data = malloc(sizeof(int)); - * (int *) win_info.data = 0; + win_info.data = &world; struct Win win_log = init_window(&win_meta, "Log"); win_log.draw = draw_text_from_bottom; @@ -397,24 +399,31 @@ int main () { else if (key == get_action_key(world.keybindings, "map left") && map.offset_x > 0) map.offset_x--; else if (key == get_action_key(world.keybindings, "player down") && map.player_y < map.height - 1) { - update_info (&win_info); + update_info (&world); update_log (&win_log, "\nYou move south."); map.player_y++; } else if (key == get_action_key(world.keybindings, "player up") && map.player_y > 0) { - update_info (&win_info); + update_info (&world); update_log (&win_log, "\nYou move north."); map.player_y--; } else if (key == get_action_key(world.keybindings, "player right") && map.player_x < map.width - 1) { - update_info (&win_info); + update_info (&world); update_log (&win_log, "\nYou move east."); map.player_x++; } else if (key == get_action_key(world.keybindings, "player left") && map.player_x > 0) { - update_info (&win_info); + update_info (&world); update_log (&win_log, "\nYou move west."); map.player_x--; } else if (key == get_action_key(world.keybindings, "wait") ) { - update_info (&win_info); + update_info (&world); update_log (&win_log, "\nYou wait."); } } + free(map.cells); + for (key = 0; key <= world.keyswindata->max; key++) + free(world.keybindings[key].name); + free(world.keybindings); + free(world.keyswindata); + free(win_log.data); + endwin(); return 0; }