#include #include #include "Point.h" #define LARGEUR 640 #define HAUTEUR 480 int main ( int argc, char** argv ) { /// [1] Démarrage // [1.1] Démarrages SDL if ( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) { std::cout << "Impossible d'initialiser la SDL: " << SDL_GetError() << std::endl; return 1; } // [1.2] Préparation de fermeture atexit(SDL_Quit); // [1.3] Para-fenêtre SDL_WM_SetCaption("Joysticks test", 0); /// [2] Préparation des composants // [2.1] Préparation de la fenêtre SDL_Surface* screen = SDL_SetVideoMode(LARGEUR, HAUTEUR, 16, SDL_HWSURFACE|SDL_DOUBLEBUF); if ( !screen ) { std::cout << "Unable to set 640x480 video: " << SDL_GetError() << std::endl; return 1; } // [2.2] Préparation de la manette if (SDL_NumJoysticks()<1) { std::cout<< "Il n'y a aucune manette de branchée."< Manette '" <format,255,255,255)); Point milieu(25,SDL_MapRGB(screen->format,255,0,54)); SDL_Rect stickGauche; stickGauche.x=LARGEUR/4; stickGauche.y=HAUTEUR/4; SDL_Rect stickDroit; stickDroit.x=LARGEUR/4; stickDroit.y=HAUTEUR/4*3; //[2.4.1] Les axes SDL_Surface* carre(0); SDL_Surface* centre(0); carre = SDL_CreateRGBSurface(SDL_HWSURFACE, 20, 20, 16, 0, 0, 0, 0); SDL_FillRect(carre,NULL,SDL_MapRGB(screen->format,255,255,255)); centre = SDL_CreateRGBSurface(SDL_HWSURFACE, 36, 10, 16, 0, 0, 0, 0); SDL_FillRect(centre,NULL,SDL_MapRGB(screen->format,255,0,54)); SDL_Rect referenceAxe; referenceAxe.x=LARGEUR/6; referenceAxe.y=HAUTEUR/2-centre->h/2; SDL_Rect axeGauche; axeGauche.x=referenceAxe.x*4; axeGauche.y=HAUTEUR/2; SDL_Rect axeDroit; axeDroit.x=referenceAxe.x*5; axeDroit.y=HAUTEUR/2; /// [3] Boucle principale bool done = false; while (!done) { // [3.1] Gestion évènements SDL_Event event; while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: done = true; break; case SDL_KEYDOWN: if (event.key.keysym.sym == SDLK_ESCAPE) done = true; break; case SDL_JOYAXISMOTION: /* Handle Joystick Motion */ if ( ( event.jaxis.value < -1/*-3200*/ ) || (event.jaxis.value > 1/*3200*/ ) ) { if( event.jaxis.axis == 0) { std::cout<<"Mouvement du stick 1 en x."; stickGauche.x=event.jaxis.value/400+LARGEUR/4; } if( event.jaxis.axis == 1) { std::cout<<"Mouvement du stick 1 en y."; stickGauche.y=event.jaxis.value/400+HAUTEUR/4; } if( event.jaxis.axis == 2) { std::cout<<"Mouvement vertical, axe y nemero 1."; axeGauche.y=event.jaxis.value/200+HAUTEUR/2; } if( event.jaxis.axis == 3) { std::cout<<"Mouvement du deuxième stick par x."; stickDroit.x=event.jaxis.value/400+LARGEUR/4; } if( event.jaxis.axis == 4) { std::cout<<"Mouvement du deuxième stick par y."; stickDroit.y=event.jaxis.value/400+HAUTEUR/4*3; } if( event.jaxis.axis == 5) { std::cout<<"Mouvement vertical du second axe :"; axeDroit.y=event.jaxis.value/200+HAUTEUR/2; } std::cout<<" Nouvelle position :"<format, 0, 128, 128)); // [3.3.1] Les sticks milieu.afficherPoint(screen,LARGEUR/4,HAUTEUR/4); rond.afficherPoint(screen,stickGauche.x,stickGauche.y); milieu.afficherPoint(screen,LARGEUR/4,HAUTEUR/4*3); rond.afficherPoint(screen,stickDroit.x,stickDroit.y); // [3.3.2] Les axes referenceAxe.x=LARGEUR/6*4; SDL_BlitSurface(centre,0,screen,&referenceAxe); SDL_BlitSurface(carre,0,screen,&axeGauche); referenceAxe.x=LARGEUR/6*5; SDL_BlitSurface(centre,0,screen,&referenceAxe); SDL_BlitSurface(carre,0,screen,&axeDroit); SDL_Flip(screen); } //fin bcl principale ///[4] Destruction des composants SDL_JoystickClose(joystick); std::cout << "Aucune erreur détectée." << std::endl; return 0; }