#include "main.h" // On cree un sdl-toplevel statique static xManager *mgr = NULL; static bool running = true; static xMarioMario *mario = NULL; static bool left_move = false; static bool right_move = false; static bool up_move = false; static bool down_move = false; 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"); // On cree un bout du terrain xMarioGrass btmcenter(mgr, (SDL_Rect){13, 20-3, 10, 3} ); btmcenter.push("bottom-center"); 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.push("mystery-bloc"); mb.start(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->push("mario"); // 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_KEYUP, &keyupEventHandler); 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); // Gestion de la gravite // if( !mario->onFloor() && SDL_GetTicks() % 10 < 5 ) // mario->velocity(0, 1.0); // Deplacement mario->moveFromVelocity(); if( mgr->hit("mystery-bloc", 0, 9) ) mb.jump(); else mb.unjump(); 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){ switch( (*e).key.keysym.sym ){ case SDLK_UP: if( !mario->_up ){ mario->_up = true; // mario->velocity(0, -40.0); } break; case SDLK_LEFT: if( !mario->_left ){ mario->_left = true; // mario->velocity(-15.0, 0); } break; case SDLK_RIGHT: if( !mario->_right ){ mario->_right = true; // mario->velocity(15.0, 0); } break; case SDLK_DOWN: if( !mario->_down ){ // mario->_down = true; // mario->velocity(0, 1.0); } break; default: cout << "UNUSED KEY" << endl; break; } } /* GESTION DE QUAND ON APPUIE SUR FLECHE BAS * * @e Pointeur sur l'evenement appelant * */ void keyupEventHandler(SDL_Event *e){ SDL_Rect *mRect = mario->viewport(); switch( (*e).key.keysym.sym ){ case SDLK_UP: mario->_up = false; break; case SDLK_LEFT: mario->_left = false; break; case SDLK_RIGHT: mario->_right = false; break; case SDLK_DOWN: // mario->_down = false; break; default: cout << "PRESSED" << endl; break; } }