#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){12, 20-2, 10, 3} ); btmcenter.push("bottom-center"); // xMarioGrass floattcenter(mgr, (SDL_Rect){14, 20-5, 1, 1} ); // floattcenter.push("float-top"); /* [3] Gestion des animations (blocs animes) =========================================================*/ // On cree une coquille verte xMarioGreenShell gs(mgr, 5, 20-3); gs.push("green-sheel"); gs.start(100, SPRITE_ANIM_INFINITE); // On cree une brique xMarioBrick mbr1(mgr, 4, 20-6); mbr1.push("brick1"); // On cree un bloc mystere xMarioMysteryBloc mb(mgr, 5, 20-6); mb.push("mystery-bloc"); mb.start(150, SPRITE_ANIM_INFINITE); // On cree une brique xMarioBrick mbr2(mgr, 6, 20-6); mbr2.push("brick2"); xMarioMysteryBloc mb1(mgr, 15, 20-6); mb1.push("mystery-bloc2"); mb1.start(150, SPRITE_ANIM_INFINITE); xMarioMysteryBloc mb2(mgr, 17, 20-5); mb2.push("mystery-bloc3"); mb2.start(150, SPRITE_ANIM_INFINITE); xMarioMysteryBloc mb3(mgr, 19, 20-4); mb3.push("mystery-bloc4"); mb3.start(150, SPRITE_ANIM_INFINITE); // On cree un bloc normal // xMarioBloc bl(mgr, (SDL_Rect){16, 20-5, 1, 1}); // bl.push("bloc-bottom-left"); // On cree mario mario = new xMarioMario(mgr, 17, 20-3); mario->push("mario"); mario->start(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); mgr->debug(); // Boucle de traitement 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, 1) ) mb.jump(); else mb.unjump(); if( mgr->hit("mystery-bloc2", 0, 1) ) mb1.jump(); else mb1.unjump(); if( mgr->hit("mystery-bloc3", 0, 1) ) mb2.jump(); else mb2.unjump(); if( mgr->hit("mystery-bloc4", 0, 1) ) mb3.jump(); else mb3.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){ 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; } }