61 lines
1.6 KiB
C++
61 lines
1.6 KiB
C++
// main.cpp - Punt d'entrada del joc Asteroides
|
|
// © 1999 Visente i Sergi (versió Pascal)
|
|
// © 2025 Port a C++20 amb SDL3
|
|
|
|
#include "sdl_manager.hpp"
|
|
#include "joc_asteroides.hpp"
|
|
|
|
int main(int argc, char* argv[]) {
|
|
// Crear gestor SDL amb finestra de 640x480
|
|
SDLManager sdl(640, 480, "Asteroides - BETA 2.2");
|
|
|
|
// Crear instància del joc
|
|
JocAsteroides joc(sdl.obte_renderer());
|
|
joc.inicialitzar();
|
|
|
|
// Loop principal del joc
|
|
SDL_Event event;
|
|
bool running = true;
|
|
|
|
// Control de temps per delta_time
|
|
Uint64 last_time = SDL_GetTicks();
|
|
|
|
while (running) {
|
|
// Calcular delta_time real
|
|
Uint64 current_time = SDL_GetTicks();
|
|
float delta_time = (current_time - last_time) / 1000.0f; // Convertir ms a segons
|
|
last_time = current_time;
|
|
|
|
// Limitar delta_time per evitar grans salts
|
|
if (delta_time > 0.05f) { // Màxim 50ms (20 FPS mínim)
|
|
delta_time = 0.05f;
|
|
}
|
|
|
|
// Processar events SDL
|
|
while (SDL_PollEvent(&event)) {
|
|
// Processar input del joc
|
|
joc.processar_input(event);
|
|
|
|
// Detectar tancament de finestra o ESC
|
|
if (event.type == SDL_EVENT_QUIT ||
|
|
(event.type == SDL_EVENT_KEY_DOWN && event.key.key == SDLK_ESCAPE)) {
|
|
running = false;
|
|
}
|
|
}
|
|
|
|
// Actualitzar física del joc amb delta_time real
|
|
joc.actualitzar(delta_time);
|
|
|
|
// Netejar pantalla (negre)
|
|
sdl.neteja(0, 0, 0);
|
|
|
|
// Dibuixar joc
|
|
joc.dibuixar();
|
|
|
|
// Presentar renderer (swap buffers)
|
|
sdl.presenta();
|
|
}
|
|
|
|
return 0;
|
|
}
|