#include "main.h" #define FRAME_VALUES 10 void gravity(GameState *gameState) { gameState->player1.y += gameState->player1.dy; gameState->player1.dy += GRAVEDAD; //gameState->player2.y += gameState->player2.dy; //gameState->player2.dy += GRAVEDAD; } Uint32 frametimes[FRAME_VALUES]; Uint32 frametimelast; Uint32 framecount; float framespersecond; void fpsinit() { memset(frametimes, 0, sizeof(frametimes)); framecount = 0; framespersecond = 0; frametimelast = SDL_GetTicks(); } void fpsthink() { Uint32 frametimesindex; Uint32 getticks; Uint32 count; Uint32 i; frametimesindex = framecount % FRAME_VALUES; getticks = SDL_GetTicks(); frametimes[frametimesindex] = getticks - frametimelast; frametimelast = getticks; framecount++; if (framecount < FRAME_VALUES) { count = framecount; } else { count = FRAME_VALUES; } framespersecond = 0; for (i = 0; i < count; i++) { framespersecond += frametimes[i]; } framespersecond /= count; framespersecond = 1000.f / framespersecond; } int main() { GameState gameState; SDL_Window *window = NULL; // Declare a window SDL_Renderer *renderer = NULL; // Declare a renderer SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO); // Initialize SDL2 declaraciones(&gameState); //Create an application window with the following settings: window = SDL_CreateWindow("HighNoon", // window title SDL_WINDOWPOS_UNDEFINED, // initial x position SDL_WINDOWPOS_UNDEFINED, // initial y position 640, // width, in pixels 480, // height, in pixels 0 // flags ); renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);// | SDL_RENDERER_PRESENTVSYNC); if(window == NULL || renderer == NULL) { printf("SDL no pudo ejecutarse o no esta instalado"); } TTF_Init(); gameState.renderer = renderer; Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 4096); loadScreen(&gameState,renderer); // The window is open: enter program loop (see SDL_PollEvent) int menu_done = 0; gameState.done = 0; while(!menu_done) { menu_done = menu_events(window,&gameState); menu_render(renderer, &gameState); } fpsinit(); ///Event loop while(!gameState.done) { ///Check for events gameState.done = processEvents(window, &gameState); ///Ejecutar gravedad gravity(&gameState); ///Deteccion de Coliciones (Objetos) collisionDetect(&gameState); ///Render display doRender(renderer, &gameState); ///Trabaja los Sprites spriteUpdate(&gameState); ///Balas processBullet(&gameState); ///Deteccion de Coliciones (Balas) bulletCollision(&gameState); fpsthink(); printf("%f\n", framespersecond); } ///Limpia balas for(int i = 0; i < MAX_BULLETS; i++) removeBullet(i, &gameState); SDL_DestroyTexture(gameState.player1Texture); SDL_DestroyTexture(gameState.player2Texture); SDL_DestroyTexture(gameState.ladrilloTexture); SDL_DestroyTexture(gameState.balaTexture); SDL_DestroyTexture(gameState.menuTexture); SDL_DestroyTexture(gameState.gameOver); SDL_DestroyTexture(gameState.backGround); Mix_FreeChunk(gameState.disparo); TTF_CloseFont(gameState.font); // Close and destroy the window SDL_DestroyWindow(window); SDL_DestroyRenderer(renderer); TTF_Quit(); // Clean up SDL_Quit(); return 0; }