#include #include #include #include "world.h" #include "mario.h" #include "level.h" #include "score.h" #include #include #include #include extern image_t img_error; GNORETURN void system_error(uint32_t code) { timer_stop(0); dimage(0,0,&img_error); dupdate(); while(1) getkey(); } int callback(volatile void *arg) { volatile int *has_ticked = arg; *has_ticked = 1; return 0; } int main(void) { extern font_t font_mario; dfont(&font_mario); gint_panic_set(system_error); volatile int has_ticked = 1; timer_setup(0, timer_delay(0, 50000), timer_Po_4, callback, &has_ticked); timer_start(0); set_level(0); int current_level=0; while(global_quit==0) { if (has_ticked) { has_ticked=0; mario_move(); dclear(C_WHITE); world_draw(mario.p.x,mario.p.y); score_display(); //ennemies_draw(); //ingame_draw(); dupdate(); if (mario_dead==1) { mario_dead=0; end_level=0; } if (end_level==0) { lifes--; set_level(current_level); extern image_t img_new_level; dimage(0,0,&img_new_level); char lvl[4]; get_lvl_id(current_level, lvl); dtext(57,28, lvl, C_WHITE, C_BLACK); sprintf(lvl, "%d", lifes); dtext(65,54, lvl, C_WHITE, C_BLACK); dupdate(); sleep_ms(3,1000); sleep_ms(3,1000); sleep_ms(3,1000); dclear(C_BLACK); } if (end_level>=1) { current_level+=end_level; set_level(current_level); } } else sleep_ms(3,1); } timer_stop(0); }