main.cpp 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. #include <iostream>
  2. #include <SDL/SDL.h>
  3. #include "Point.h"
  4. #define LARGEUR 640
  5. #define HAUTEUR 480
  6. int main ( int argc, char** argv )
  7. {
  8. /// [1] Démarrage
  9. // [1.1] Démarrages SDL
  10. if ( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0)
  11. {
  12. std::cout << "Impossible d'initialiser la SDL: " << SDL_GetError() << std::endl;
  13. return 1;
  14. }
  15. // [1.2] Préparation de fermeture
  16. atexit(SDL_Quit);
  17. // [1.3] Para-fenêtre
  18. SDL_WM_SetCaption("Joysticks test", 0);
  19. /// [2] Préparation des composants
  20. // [2.1] Préparation de la fenêtre
  21. SDL_Surface* screen = SDL_SetVideoMode(LARGEUR, HAUTEUR, 16,
  22. SDL_HWSURFACE|SDL_DOUBLEBUF);
  23. if ( !screen )
  24. {
  25. std::cout << "Unable to set 640x480 video: " << SDL_GetError() << std::endl;
  26. return 1;
  27. }
  28. // [2.2] Préparation de la manette
  29. if (SDL_NumJoysticks()<1)
  30. {
  31. std::cout<< "Il n'y a aucune manette de branchée."<<std::endl
  32. <<"Veuillez réessayer avec un pad connecté."<<std::endl;
  33. return 1;
  34. }
  35. SDL_Joystick *joystick;
  36. SDL_JoystickEventState(SDL_ENABLE);
  37. joystick = SDL_JoystickOpen(0);
  38. // [2.3] Affichage en console
  39. std::cout << "Il y a " <<SDL_NumJoysticks()<< " manette(s) disponible(s)." <<std::endl;
  40. std::cout << "Leur(s) adresse(s) sont(est): ";
  41. for (int i(0);i<SDL_NumJoysticks();i++)
  42. {
  43. std::cout<< "==> Manette '" <<SDL_JoystickName(i)<<"'; ";
  44. }
  45. std::cout << std::endl;
  46. std::cout << "La manette selectionnée est : "<<SDL_JoystickName(0)<<". "<<std::endl
  47. << "Elle possède " <<SDL_JoystickNumAxes(joystick)<< " axes; "<<std::endl
  48. << "Mais également " <<SDL_JoystickNumButtons(joystick)<< " boutons. " << std::endl;
  49. std::cout << "Lancement du test pour "<<SDL_JoystickName(0)<<". "<<std::endl;
  50. /* [2.4] Préparation des composants */
  51. //[2.4.1] Les sticks
  52. Point rond(20,SDL_MapRGB(screen->format,255,255,255));
  53. Point milieu(25,SDL_MapRGB(screen->format,255,0,54));
  54. SDL_Rect stickGauche;
  55. stickGauche.x=LARGEUR/4;
  56. stickGauche.y=HAUTEUR/4;
  57. SDL_Rect stickDroit;
  58. stickDroit.x=LARGEUR/4;
  59. stickDroit.y=HAUTEUR/4*3;
  60. //[2.4.1] Les axes
  61. SDL_Surface* carre(0);
  62. SDL_Surface* centre(0);
  63. carre = SDL_CreateRGBSurface(SDL_HWSURFACE, 20, 20, 16, 0, 0, 0, 0);
  64. SDL_FillRect(carre,NULL,SDL_MapRGB(screen->format,255,255,255));
  65. centre = SDL_CreateRGBSurface(SDL_HWSURFACE, 36, 10, 16, 0, 0, 0, 0);
  66. SDL_FillRect(centre,NULL,SDL_MapRGB(screen->format,255,0,54));
  67. SDL_Rect referenceAxe;
  68. referenceAxe.x=LARGEUR/6;
  69. referenceAxe.y=HAUTEUR/2-centre->h/2;
  70. SDL_Rect axeGauche;
  71. axeGauche.x=referenceAxe.x*4;
  72. axeGauche.y=HAUTEUR/2;
  73. SDL_Rect axeDroit;
  74. axeDroit.x=referenceAxe.x*5;
  75. axeDroit.y=HAUTEUR/2;
  76. /// [3] Boucle principale
  77. bool done = false;
  78. while (!done)
  79. {
  80. // [3.1] Gestion évènements
  81. SDL_Event event;
  82. while (SDL_PollEvent(&event))
  83. {
  84. switch (event.type)
  85. {
  86. case SDL_QUIT:
  87. done = true;
  88. break;
  89. case SDL_KEYDOWN:
  90. if (event.key.keysym.sym == SDLK_ESCAPE)
  91. done = true;
  92. break;
  93. case SDL_JOYAXISMOTION: /* Handle Joystick Motion */
  94. if ( ( event.jaxis.value < -1/*-3200*/ ) || (event.jaxis.value > 1/*3200*/ ) )
  95. {
  96. if( event.jaxis.axis == 0)
  97. {
  98. std::cout<<"Mouvement du stick 1 en x.";
  99. stickGauche.x=event.jaxis.value/400+LARGEUR/4;
  100. }
  101. if( event.jaxis.axis == 1)
  102. {
  103. std::cout<<"Mouvement du stick 1 en y.";
  104. stickGauche.y=event.jaxis.value/400+HAUTEUR/4;
  105. }
  106. if( event.jaxis.axis == 2)
  107. {
  108. std::cout<<"Mouvement vertical, axe y nemero 1.";
  109. axeGauche.y=event.jaxis.value/200+HAUTEUR/2;
  110. }
  111. if( event.jaxis.axis == 3)
  112. {
  113. std::cout<<"Mouvement du deuxième stick par x.";
  114. stickDroit.x=event.jaxis.value/400+LARGEUR/4;
  115. }
  116. if( event.jaxis.axis == 4)
  117. {
  118. std::cout<<"Mouvement du deuxième stick par y.";
  119. stickDroit.y=event.jaxis.value/400+HAUTEUR/4*3;
  120. }
  121. if( event.jaxis.axis == 5)
  122. {
  123. std::cout<<"Mouvement vertical du second axe :";
  124. axeDroit.y=event.jaxis.value/200+HAUTEUR/2;
  125. }
  126. std::cout<<" Nouvelle position :"<<event.jaxis.value<<std::endl;
  127. }
  128. break;
  129. } // end switch event type
  130. } // end of message processing
  131. // [3.2] Calculs
  132. // [3.3] Dessin des composants
  133. SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 128, 128));
  134. // [3.3.1] Les sticks
  135. milieu.afficherPoint(screen,LARGEUR/4,HAUTEUR/4);
  136. rond.afficherPoint(screen,stickGauche.x,stickGauche.y);
  137. milieu.afficherPoint(screen,LARGEUR/4,HAUTEUR/4*3);
  138. rond.afficherPoint(screen,stickDroit.x,stickDroit.y);
  139. // [3.3.2] Les axes
  140. referenceAxe.x=LARGEUR/6*4;
  141. SDL_BlitSurface(centre,0,screen,&referenceAxe);
  142. SDL_BlitSurface(carre,0,screen,&axeGauche);
  143. referenceAxe.x=LARGEUR/6*5;
  144. SDL_BlitSurface(centre,0,screen,&referenceAxe);
  145. SDL_BlitSurface(carre,0,screen,&axeDroit);
  146. SDL_Flip(screen);
  147. } //fin bcl principale
  148. ///[4] Destruction des composants
  149. SDL_JoystickClose(joystick);
  150. std::cout << "Aucune erreur détectée." << std::endl;
  151. return 0;
  152. }