Raquette.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "Raquette.h"
  2. Raquette::Raquette(int identifiant, int nbJoueursTotal, Uint32 couleur):
  3. m_identifiant(identifiant),m_centre(COTE/2,COTE/2),
  4. m_angleOrigine(0,COTE/2-COTE/36),m_angleEcartMax(180/nbJoueursTotal-(asin((float)RAYON_RQT/RAYON_TERRAIN)*180/M_PI))
  5. {
  6. m_angleOrigine.rotate(360.0/nbJoueursTotal*identifiant);
  7. m_angleActuel = m_angleOrigine;
  8. m_pixel = SDL_CreateRGBSurface(SDL_HWSURFACE, 1, 1, 32, 0, 0, 0, 0);
  9. SDL_FillRect(m_pixel,0,couleur);
  10. m_position = m_centre+m_angleActuel;
  11. }///Constructeur
  12. Raquette::~Raquette()
  13. {
  14. SDL_FreeSurface(m_pixel);
  15. }///Destructeur
  16. void Raquette::afficher(SDL_Surface* screen)
  17. {
  18. // [1] Balayage des positions
  19. SDL_Rect pos;
  20. float distanceCentre;
  21. for(int y(-RAYON_RQT);y<RAYON_RQT;y++)
  22. for(int x(-RAYON_RQT);x<RAYON_RQT;x++)
  23. {
  24. // [2] Position du point en balayage
  25. pos.x = m_position.getX()+x;
  26. pos.y = m_position.getY()+y;
  27. distanceCentre = (Vecteur(pos.x, pos.y)-m_centre).norme();
  28. // [3] Arrondi
  29. if(distanceCentre < RAYON_FENETRE && distanceCentre > RAYON_TERRAIN &&
  30. x*x+y*y < (RAYON_RQT)*(RAYON_RQT))
  31. SDL_BlitSurface(m_pixel, 0, screen, &pos);
  32. }
  33. }///afficher
  34. void Raquette::deplacer(bool droite)
  35. {
  36. // [1] Teste si la raquette a le droit de bouger
  37. bool ecart = m_angleActuel.scalair(m_angleOrigine)<=m_angleEcartMax;
  38. // [2] On bouge
  39. //[2.1] Vers la droite
  40. if(droite && ecart)
  41. {
  42. //[2.1.1]Mouvement
  43. m_angleActuel.rotate(VITESSE);
  44. //[2.1.2]Pas trop loin !
  45. if (m_angleActuel.scalair(m_angleOrigine)>m_angleEcartMax)
  46. {
  47. Vecteur tmp(m_angleOrigine);
  48. tmp.rotate(m_angleEcartMax-0.05);
  49. m_angleActuel = tmp;
  50. }
  51. }
  52. //[2.2] Ou vers la gauche
  53. else if (ecart)
  54. {
  55. m_angleActuel.rotate(-VITESSE);
  56. if (m_angleActuel.scalair(m_angleOrigine)>m_angleEcartMax)
  57. {
  58. Vecteur tmp(m_angleOrigine);
  59. tmp.rotate(-m_angleEcartMax+0.05);
  60. m_angleActuel = tmp;
  61. }
  62. }
  63. else
  64. {
  65. Vecteur tmp(m_angleOrigine);
  66. tmp.rotate(-m_angleEcartMax);
  67. m_angleActuel = tmp;
  68. }
  69. // [END]
  70. m_position = m_centre+m_angleActuel;
  71. }///deplacer
  72. Vecteur Raquette::getAngleActuel()
  73. {
  74. return m_angleActuel;
  75. }///getAngleActuel