123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #include "jeu.h"
- bool jeu(std::string nomFichierNiveau)
- {
- /// [1] Lancement du jeu
- // [1.1] Création de l'écran
- SDL_Surface *screen = SDL_SetVideoMode(640, 480, 16,
- SDL_HWSURFACE|SDL_DOUBLEBUF);
- if ( !screen )
- {
- std::cout << "Unable to set 640x480 video: "<< SDL_GetError() << std::endl;
- return 1;
- }
- SDL_WM_SetCaption("Gravitation Game _ Play",NULL);
- // [1.2] Préparation des composants
- bool goMenu(false);
- Uint32 tempsPrecedent(0);
- Level *niveau(0);
- niveau = haveLevel(nomFichierNiveau);
- if (niveau==0)
- {
- //Erreur détectée, retour au menu
- std::cout << "Jeu.cpp: erreur détectée: niveau inexistant ou illisible" << std::endl;
- return true;//retour au menu
- }
- Balle* ball(haveBall(niveau));
- /// [2] Boucle principale évenementielle
- bool done = false;
- while (!done)
- {
- // [2.1] Gestion évènement
- SDL_Event event;
- while (SDL_PollEvent(&event))
- {
- switch (event.type)
- {
- case SDL_QUIT:
- done = true;
- goMenu = false;
- break;
- case SDL_KEYDOWN:
- switch (event.key.keysym.sym)
- {
- case SDLK_ESCAPE:
- done = true;
- goMenu = true;
- break;
- case SDLK_UP:
- ball->demarrage(HAUT);
- break;
- case SDLK_RIGHT:
- ball->demarrage(DROITE);
- break;
- case SDLK_DOWN:
- ball->demarrage(BAS);
- break;
- case SDLK_LEFT:
- ball->demarrage(GAUCHE);
- break;
- case SDLK_s:
- ball->statutConsole();
- break;
- }///switch keysym
- break;///keydown
- case SDL_KEYUP:
- switch (event.key.keysym.sym)
- {
- case SDLK_ESCAPE:
- done = true;
- break;
- case SDLK_UP:
- ball->arret(HAUT);
- break;
- case SDLK_RIGHT:
- ball->arret(DROITE);
- break;
- case SDLK_DOWN:
- ball->arret(BAS);
- break;
- case SDLK_LEFT:
- ball->arret(GAUCHE);
- break;
- case SDLK_BACKSPACE:
- ball->respawn();
- break;
- }///switch keysym
- break;///keyup
- } ///switch
- } ///while
- // [2.2] Calcul
- ball->calculMouvement();
- // [2.3] Dessin
- SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 120, 130, 228));
- ball->dessiner(screen);
- niveau->afficher(screen);
- SDL_Flip(screen);
- // [2.4] Gestion du temps
- while (30>SDL_GetTicks()-tempsPrecedent)//30ms normalement (3000 debug)
- {
- //ça bloque pendant 30 ms moins le temps de calcul
- }
- tempsPrecedent=SDL_GetTicks();
- } ///Boucle principale évenementielle
- /// [3] Nettoyage
- delete niveau;
- delete ball;
- SDL_FreeSurface(screen);
- /// [4] Fin de la partie
- std::cout << "Jeu.cpp: Partie terminée, pas d'erreur détectée." << std::endl;
- return goMenu;
- }///jeu()
|