int main(int argc, char **argv) { SDL_Surface *screen, *background, *pause_text, *press_enter_text, *game_over_text; const SDL_VideoInfo *video_info; Uint32 frame_start, frame_end = 0, game_frame_end = 0; systems_init(); screen = SDL_SetVideoMode(800, 600, 0, SDL_HWSURFACE|SDL_DOUBLEBUF); video_info = SDL_GetVideoInfo(); create_images(&press_enter_text, &pause_text, &game_over_text, &background); create_entities(); for(;;) { start_frame(&frame_start, &frame_end); if(check_SDL_events()) break; draw_background(background, screen, video_info); update_entities(game_frame_end ); if(is_paused()) { if(is_game_over()) { draw_centered(screen, video_info, game_over_text); } else if(is_started()) { draw_centered(screen, video_info, pause_text); } else { draw_centered(screen, video_info, press_enter_text); } } SDL_Flip(screen); finish_frame(&frame_start, &frame_end, &game_frame_end); } SDL_FreeSurface(background); SDL_FreeSurface(pause_text); SDL_FreeSurface(press_enter_text); systems_shutdown(); return 0; }
void Game::run(){ bool game_running = true; Timer fps; SDL_Event event; while( game_running ){ // Start timing fps fps.start(); SDL_PollEvent(&event); if(event.key.repeat != 1){ switch(event.type){ case SDL_QUIT: game_running = false; break; case SDL_KEYDOWN: m_keys[SDL_KEY_CONVERT(event.key.keysym.sym)] = 1; break; case SDL_KEYUP: m_keys[SDL_KEY_CONVERT(event.key.keysym.sym)] = 0; break; } handle_input(); } // Only update if game is running if( m_current_state == state_game_running ){ update_entities(); } draw(); // Lock framerate if( fps.get_ticks() < g_max_ticks ){ SDL_Delay( ( g_max_ticks ) - fps.get_ticks() ); } } }