lab.cpp/SDL#4/main.cpp

180 lines
3.3 KiB
C++
Raw Normal View History

2016-03-12 23:22:28 +00:00
#include "main.h"
// On cree un sdl-toplevel statique
static xManager *mgr = NULL;
static bool running = true;
static xMarioMario *mario = NULL;
2016-03-12 23:22:28 +00:00
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);
2016-03-12 23:22:28 +00:00
// 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");
2016-03-12 23:22:28 +00:00
/* [2] On definit le terrain
2016-03-12 23:22:28 +00:00
=========================================================*/
// On cree un bout du terrain
xMarioGrass btmleft(mgr, (SDL_Rect){-1, 20-2, 10, 3} );
btmleft.push("bottom-left");
2016-03-12 23:22:28 +00:00
2016-03-13 14:22:14 +00:00
xMarioGrass floattcenter(mgr, (SDL_Rect){10, 10, 5, 5} );
floattcenter.push("float-center");
2016-03-13 14:22:14 +00:00
2016-03-12 23:22:28 +00:00
/* [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);
2016-03-12 23:22:28 +00:00
// On cree un bloc mystere
xMarioMysteryBloc mb(mgr, 5, 20-5);
mb.start("mystery-bloc", 150, SPRITE_ANIM_INFINITE);
2016-03-12 23:22:28 +00:00
2016-03-13 14:22:14 +00:00
// 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);
2016-03-12 23:22:28 +00:00
/* [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();
2016-03-12 23:22:28 +00:00
mgr->manageFps(FPS);
while(running){
// Gestion des evenements
while( SDL_PollEvent(&event) != 0 )
mgr->manageEvents(&event);
2016-03-12 23:22:28 +00:00
mgr->manageFps(); // Gestion des FPS (speed)
mgr->update(); // Mise a jour du rendu
2016-03-12 23:22:28 +00:00
}
/* [n] Fin d'execution
=========================================================*/
delete mgr;
return 0;
}
/* GESTION DE QUAND ON QUITTE LA FENETRE
*
* @e<SDL_Event*> Pointeur sur l'evenement appelant
*
*/
2016-03-12 23:22:28 +00:00
void quitEventHandler(SDL_Event *e){
cout << "Exiting program" << endl;
2016-03-12 23:22:28 +00:00
running = false;
}
/* GESTION DE QUAND ON APPUIE SUR FLECHE BAS
*
* @e<SDL_Event*> 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;
}
2016-03-12 23:22:28 +00:00
}