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 :
- void RebondirFilet ( BALLE in, BALLE* out, int fx, int fy, int L)
- {
- int x = in.posballex;
- int y = in.posballey;
- int vy= in.vitesseballey;
- int vx= in.vitesseballex;
- //Rebond sur le haut
- if ( (y>=fy) && (x>=fx) && (x<=fx+L))
- {
- out->vitesseballey=- vy;
- out->posballey= 620;
- }
- Rebond à gauche/droite
- if ((y>=fy) && (x>=fx-20)&& (x<fx+L) )
- {
- out->vitesseballex = - vx ;
- out->posballex = x+fx-20 ;
- }
|
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 :
- void Rebondirj1( BALLE in, BALLE* out, JOUEUR jin, JOUEUR* jout)
- {
- float y = in.posballey;
- float x = in.posballex;
- float vx = in.vitesseballex;
- float vy = in.vitesseballey;
- float jx = jin.posx;
- float jy = jin.posy;
- if( sqrt ( (x - jx )*(x - jx ) + (y - jy)*(y - jy) ) <= 90 ) // Si contact
- {
- if ( ( x > (jx - 20) ) && (x < (jx + 20) ) ) // Si balle au centre
- {
- out -> vitesseballey = - vy ;
- out -> posballey = jy-90;
- }
- if (x >= (jx + 20) ) // Si balle à droite
- {
- out -> vitesseballey = - vy ;
- out -> posballey = jy-90;
- out -> vitesseballex = vx +5;
- }
- if (x <= (jx-20 ) ) ; // Si balle à gauche
- {
- out -> vitesseballey = - vy ;
- out -> vitesseballex = -5;
- }
|
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