/* Run the game */ void run (struct state *st, struct ui *ui) { int k = 0; int finished = 0; while( !finished ) { if (time_to_redraw) { k++; if (k>=1600) k=0; int slowdown = game_slowdown(st->speed); if (k % slowdown == 0 && st->speed != sp_pause) { kings_move(st); simulate(st); if (st->show_timeline) { if (st->time%10 == 0) update_timeline(st); } } output_grid(st, ui, k); if (st->show_timeline) { if (st->time%10 == 0) output_timeline(st, ui); } time_to_redraw = 0; win_or_lose_message(st, k); } finished = update_from_input(st, ui); // refresh(); pause(); // sleep until woken up by SIGALRM } }
/* **update\_level()** is called by the Cage game loop for every frame * and has to update the game state ( animations, positions, etc..) * as well as redraw the frame using **draw\_level()**. */ static void update_level(void* data, float elapsed_ms) { struct level_data* ldata = data; animate_wizard(ldata->wizard, elapsed_ms); animate_sprite(ldata->tree.sprite, elapsed_ms); draw_level(data, elapsed_ms); update_timeline(ldata->timeline, data, elapsed_ms); if (key_pressed(KB_ESC)) exit(0); }