#include #include #include "keyb.h" #include "vga.h" #include "text.h" #include "map.h" #include "data.h" #include "game.h" static uint32_t hiscore = 15000; static uint8_t hud; static volatile uint8_t clock_updated; /* game variables */ static uint8_t lives; static uint32_t score; static uint8_t stage; static uint8_t gold; static uint8_t time; void hud_render() { char b[32]; if (hud & HUD_ALL) { Rect src = { 128, 32, 144, 144}; Rect dst = { 4, 0, 16, 16}; /* lives */ blitrc(binary_sprites_start, &src, &dst); put_text(136, 4, "TIME"); put_text(252, 4, "STAGE"); } if (hud & HUD_LIVES) { sprintf(b, "%d", lives); put_text(18, 4, b); } if (hud & HUD_SCORE) { sprintf(b, "%06li", score); put_text(34, 4, b); } if (hud & HUD_TIME) { sprintf(b, "%02d", time); put_text(176, 4, b); } if (hud & HUD_STAGE) { sprintf(b, "%02d", stage); put_text(300, 4, b); } hud = HUD_CLEAN; } void run_game() { lives = GAME_LIVES_START; score = 0; stage = 0; gold = 30; time = GAME_TIME_MAX; hud = HUD_ALL; map_init(binary_stage_start); map_render(); timer_start(GAME_TIME_MAX, &clock_updated); while (!keys[KEY_ESC]) { if (clock_updated) { time = timer_value(); hud |= HUD_TIME; } if (hud) hud_render(); wait_vsync(); blit_update(); } }