Problème de Rebond sur un filet

Problème de Rebond sur un filet - C - Programmation

Marsh Posté le 16-05-2015 à 19:00:02    

Bonjour tout le monde,
 
Je suis en train de programmer un slime volley en C et je me trouve confronté à 2 problèmes:
 
- J'ai dû mal à faire rebondir la balle contre le filet au milieu. Les conditions de contact sont similaires pour les côtés et le haut du filet, ce qui me donne un résultat assez horrible quand je run.
 

Code :
  1. void RebondirFilet ( BALLE in, BALLE* out,  int fx, int fy, int L)
  2. {
  3.    int x = in.posballex;
  4.    int y = in.posballey;
  5.    int vy= in.vitesseballey;
  6.    int vx= in.vitesseballex;
  7. //Rebond sur le haut
  8.     if ( (y>=fy) && (x>=fx) && (x<=fx+L))
  9.     {
  10.         out->vitesseballey=- vy;
  11.         out->posballey= 620;
  12.     }
  13. Rebond à gauche/droite
  14.    if  ((y>=fy) && (x>=fx-20)&& (x<fx+L) )
  15.    {
  16.       out->vitesseballex = - vx ;
  17.       out->posballex     = x+fx-20 ;
  18.   }


 
pour le rebond à gauche et à droite les conditions sont les mêmes mais les sorties sont différentes, ce qui donne un gros n'importe quoi.
 
 
Ensuite j'ai quelques problèmes pour les rebonds sur les demi cercles. Il y a énormément de topics là dessus mais j'ai des problèmes pour inclure des angles et des dérivées dans mon code (Je bosse en FLTK il me semble, et je ne peux pas changer) J'ai tenté beaucoup de choses en intégrant des fonctions mathématiques à mon code mais rien ne marche.
 

Code :
  1. void Rebondirj1( BALLE in, BALLE* out, JOUEUR jin, JOUEUR* jout)
  2. {
  3. float y = in.posballey;
  4. float x = in.posballex;
  5. float vx = in.vitesseballex;
  6. float vy = in.vitesseballey;
  7. float jx = jin.posx;
  8. float jy = jin.posy;
  9.     if(   sqrt (  (x - jx )*(x - jx )   +  (y - jy)*(y - jy)  )  <=   90 )   //  Si contact
  10.     {
  11.             if ( ( x > (jx - 20) ) && (x < (jx + 20) ) )   //   Si balle au centre
  12.             {
  13.              out -> vitesseballey = -  vy ;
  14.              out -> posballey = jy-90;
  15.             }
  16.             if (x >= (jx + 20) )   //  Si balle à droite
  17.             {
  18.                 out -> vitesseballey = -  vy ;
  19.                 out -> posballey = jy-90;
  20.                 out -> vitesseballex = vx +5;
  21.             }
  22.       if  (x <= (jx-20 ) ) ;   //  Si balle à gauche
  23.            {
  24.            out -> vitesseballey = -  vy ;
  25.            out -> vitesseballex = -5;
  26.             }


 
Du coup je me suis contenté de ça, mais vous avez bien compris que c'est loin d'être suffisant, la balle atterri toujours au même endroit
 
Merci de votre aide

Reply

Marsh Posté le 16-05-2015 à 19:00:02   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed