#include "main.h" // On cree un sdl-toplevel statique static xManager *mgr = NULL; static bool running = true; static xMarioMario *mario = NULL; int main(int argc, char* argv[]) { srand(time(0)); /* [0] Initialisation du manager + Creation de la fenetre =========================================================*/ mgr = new xManager("Ma fenetre SDL", BLOC_WIDTH*BLOC_SIZE, BLOC_HEIGHT*BLOC_SIZE); // Gestion erreur if( !mgr->status() ){ cout << "[INIT] -> " << SDL_GetError() << endl; return -1; } // Couleur de fond mgr->setBackground(0, 96, 183); mgr->setImage("src/bg1.png"); /* [2] On definit le terrain =========================================================*/ // On cree un bout du terrain xMarioGrass btmleft(mgr, (SDL_Rect){-1, 20-2, 10, 3} ); btmleft.push("bottom-left"); xMarioGrass floattcenter(mgr, (SDL_Rect){10, 10, 5, 5} ); floattcenter.push("float-center"); /* [3] Gestion des animations (blocs animes) =========================================================*/ // On cree une coquille verte // xMarioGreenShell gs(mgr, 5, 20-3); // gs.start("green-sheel", 100, SPRITE_ANIM_INFINITE); // On cree un bloc mystere xMarioMysteryBloc mb(mgr, 5, 20-5); mb.start("mystery-bloc", 150, SPRITE_ANIM_INFINITE); // On cree un bloc normal // xMarioBloc bl(mgr, (SDL_Rect){0, 20-2, 10, 3}); // bl.push("bloc-bottom-left"); // On cree mario mario = new xMarioMario(mgr, 5, 20-3); mario->start("mario", 100, SPRITE_ANIM_INFINITE); /* [n-1] Boucle infinie =========================================================*/ // Gestion des evenements SDL_Event event; mgr->attachEvent(SDL_KEYDOWN, &keydownEventHandler); mgr->attachEvent(SDL_QUIT, &quitEventHandler); // Boucle de traitement mgr->update(); mgr->update(); mgr->manageFps(FPS); while(running){ // Gestion des evenements while( SDL_PollEvent(&event) != 0 ) mgr->manageEvents(&event); mgr->manageFps(); // Gestion des FPS (speed) mgr->update(); // Mise a jour du rendu } /* [n] Fin d'execution =========================================================*/ delete mgr; return 0; } /* GESTION DE QUAND ON QUITTE LA FENETRE * * @e Pointeur sur l'evenement appelant * */ void quitEventHandler(SDL_Event *e){ cout << "Exiting program" << endl; running = false; } /* GESTION DE QUAND ON APPUIE SUR FLECHE BAS * * @e Pointeur sur l'evenement appelant * */ void keydownEventHandler(SDL_Event *e){ SDL_Rect *mRect = mario->viewport(); bool hasMoved = false; int step = 20; switch( (*e).key.keysym.sym ){ case SDLK_UP: while( !hasMoved && step > 0 ){ if( !mgr->hit("mario", 0, -step) ){ mario->move(0, -step); hasMoved = true; } step--; } break; case SDLK_LEFT: while( !hasMoved && step > 0 ){ if( !mgr->hit("mario", -step, 0) ){ mario->move(-step, 0); hasMoved = true; } step--; } break; case SDLK_RIGHT: while( !hasMoved && step > 0 ){ if( !mgr->hit("mario", step, 0) ){ mario->move(step, 0); hasMoved = true; } step--; } break; case SDLK_DOWN: while( !hasMoved && step > 0 ){ if( !mgr->hit("mario", 0, step) ){ mario->move(0, step); hasMoved = true; } step--; } break; default: cout << "PRESSED" << endl; break; } }