#include #include #include #include #include "PluieFlamme.h" /* #include */ using namespace std; int main ( int argc, char** argv ) { /// [1] Démarrage // [1.1] Démarrages SDL if ( SDL_Init( SDL_INIT_VIDEO ) < 0) { cout << "Impossible d'initialiser la SDL: " << SDL_GetError() << endl; return 1; } // [1.2] Préparation de fermeture atexit(SDL_Quit); // [1.3] Para-fenêtre SDL_WM_SetCaption("Application SDL", 0); /// [2] Préparation des composants // [2.1] Préparation de la fenêtre int largeur(640); int hauteur(480); SDL_Surface* screen = SDL_SetVideoMode(largeur, hauteur, 32, SDL_HWSURFACE|SDL_DOUBLEBUF); if ( !screen ) { cout << "Unable to set 640x480 video: " << SDL_GetError() << endl; return 1; } // [2.2] Préparation DoubleAxe souris; Uint32 tempsPrecedent; Uint8 rouge(0); Uint8 vert(0); Uint8 bleu(0); Uint32 couleur; PluieFlamme* boum(0); int nbPop, power, rayon; float graviteY, resistance; // [2.3] Requête de parmètres cout << "Entrez les paramètres."<< endl; cout << "Nombre de particules par salve: "; cin >> nbPop; cout << "Puissance de dissipation des particules (defaut 5): "; cin >> power; cout << "Gravité (défaut 0.5): "; cin >> graviteY; cout << "Rayon des particules (défaut 12): "; cin >> rayon; cout << "Resistance de l'air (défaut 0.98): "; cin >> resistance; cout << "Démarrage du lanceur chinois." << endl; /// [3] Boucle principale bool done = false; while (!done) { // [3.1] Gestion évènements SDL_Event event; while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: done = true; break; case SDL_KEYDOWN: if (event.key.keysym.sym == SDLK_ESCAPE) done = true; break; case SDL_MOUSEBUTTONDOWN: if (event.button.button==SDL_BUTTON_LEFT && boum==0) { souris.x=event.button.x; souris.y=event.button.y; boum = new PluieFlamme(souris, nbPop, power, graviteY, rayon, couleur, resistance); } break; case SDL_MOUSEMOTION: vert = event.motion.x*255/largeur; rouge = event.motion.y*255/hauteur; if ((int)vert+rouge > 255) bleu = 0; else bleu = 255-vert-rouge; couleur=SDL_MapRGB(screen->format,rouge,vert,bleu); break; } // end switch event type } // end of message processing // [3.2] Calculs //nettoyer if (boum!=0 && boum->estFini(screen)) { delete boum; boum = 0; } // [3.3] Dessin des composants SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0)); if (boum!=0) { boum->deplacement(); boum->dessiner(screen); } SDL_Flip(screen); // [3.4] Gestion du temps if (SDL_GetTicks()-tempsPrecedent > 40) cout << "Temps de calcul trop long ! Cadence dépassée de " <SDL_GetTicks()-tempsPrecedent) { //ça bloque pendant 30 ms moins le temps de calcul } tempsPrecedent=SDL_GetTicks(); } //fin bcl principale ///[4] Destruction des composants SDL_FreeSurface(screen); if (boum!=0) delete boum; cout << "Aucune erreur détectée." << endl; return 0; }