Posté le 11/12/2007 à 17:51 Membre depuis le 25/11/2007, 9 messages
Bonjour bonjour! alors voilà, je vous expose mon problème.. j'essai de faire une sorte de jeu avec une balle qui rebondirait sur une raquette.. pour le moment, cette balle rebondi bien sur la raquette, pas de soucis là dessu..
mai maintenant je voudrais faire bouger cette balle sur les côtés (car pour le moment elle ne fait que monter et décendre..). Mais plus précisément que cette balle lorsqu'elle touche le côté droit de la raquette, parte à droite, le gauche à gauche, et le centre en haut..

merci de votre aide..

mon code pour le moment.. (faux malheureusement..)

A
16→B
ClrHome
While A≠9
1→C
While C≠5
C+1→C
End
Output(2,A,"*
Output(2,B,"*
Output(4,A,"*
Output(4,B,"*
Output(6,A,"*
Output(6,B,"*
A+1→A
B-1→B
End
Output(3,7,"MADE"
Output(5,8,"BY"
Output(7,7,"NICO"
Pause
ClrHome
7→A
7→B
8→D
Lbl 2
While B≠1
1→C
While C≠15
C+1→C
End
ClrHome
Output(8,A,"---"
Output(B,D,"*
getKey→K
If K=24:A-1→A
If K=26:A+1→A
If K=45:Goto 0
If A=0:A+1→A
If A=15:A-1→A
B-1→B
End
Goto 5
Lbl 5
While B≠8
1→C
While C≠15
C+1→C
End
ClrHome
Output(8,A,"---
Output(B,D,"*
getKey→K
If K=24:A-1→A
If K=26:A+1→A
If K=45:Goto 0
If A=0:A+1→A
If A=15:A-1→A
B+1→B
If B=7 and A=D:Goto 2
If B=7 and A=D-1:Goto 2:D-1→D
If B=7 and A=D+1:Goto 2:D+1→D

End
Goto 2
Lbl 0
Output(1,1,"


et si je remplace:
If B=7 and A=D:Goto 2
If B=7 and A=D-1:Goto 2:D-1→D
If B=7 and A=D+1:Goto 2:D+1→D

par:
If B=7 and A=8:Goto 2
If B=7 and A=7:Goto 2:D-1→D
If B=7 and A=9:Goto 2:D+1→D


ça marche pour le milieu (je comprend pourquoi, mai en remplaçant 8 ou 7 par D ou D-1, je ne comprend pas..)
Posté le 11/12/2007 à 18:04 Membre depuis le 06/02/2006, 349 messages
Bah tu prends une variable E par exemple pour le milieu de la raquette et tu compare l'endroit de la collision Z (par exemple) par rapport à E

If Z>E
//partir à droite
If Z<E
//partir à gauche
If Z=E
//partir en haut
Posté le 11/12/2007 à 18:24 Membre depuis le 25/11/2007, 9 messages
Oaui mai là le problème c'est que si je met ça, la balle va partir à gauche ou à droite même si la barre est à côté.. le but du "jeu" si je peux appeler ça comme ça, serai de ne pas faire tomber la balle.. ah et comment faire pour que la balle rebondisse sur les murs aussi?..
merci pour cette réponse rapide!
Posté le 11/12/2007 à 19:49 Membre depuis le 09/02/2005, 13736 messages
En fait l'idéal est de gérer un "vecteur déplacement" que tu ajoutes à la position de la balle à chaque boucle.
Par exemple I=1 / J=1 donne un déplacement de 1 vers le bas et 1 vers la droite à chaque boucle. Pour les rebonds sur les murs, il suffit alors de tester la postion de la balle à chaque boucle, et si celle-ci est à coté d'un mur tu inverse une coordonée de déplacement (par exempe si elle est a coté du mur droit, tu stockes -J dans J pour inverser le déplacement horizontal et la faire "fuir" le mur).

Exemple de boucle pour les rebonds :

ClrHome
4&#8594;A
5&#8594;B
1&#8594;I
1&#8594;J
While 1
A+I&#8594;C
B+J&#8594;D
Output(A,B," "
Output(C,D,"O"
C&#8594;A
D&#8594;B
If A=1 or A=8:-I&#8594;I
If B=1 or B=16:-J&#8594;J
End

ruRN
Posté le 11/12/2007 à 20:23 Membre depuis le 25/11/2007, 9 messages
Merci beaucoup!

mai mantenant, comment faire "rebondir la balle" avec des angles différents suivant l'endroit ou elle tombe sur la barre?..
Posté le 12/12/2007 à 18:28 Membre depuis le 09/02/2005, 13736 messages
Pareil, des tests sur la position de la balle à chaque boucle, et une modification du "vecteur déplacement" en conséquence (par exemple si la balle est au dessus du bout droit de la raquette, tu rajoutes 1 à J (déplacement de 1 plus rapide vers la droite), et tu inverses I (rebond vers le haut sur la raquette)). Par contre il faudra adapter le deplacement pour pas que la balle sorte de l'ecran a droite ou à gauche, pour cela il faut 2 tests de plus par boucle : un pour si la balle sort à gauche (If J<1 : 1->J) et un pour si elle sort à droite (If J>16 : 16->J).
Posté le 12/12/2007 à 22:11 Membre depuis le 25/11/2007, 9 messages
merci, mais déja j'arrive pas à faire rebondir ma balle sur la raquette, j'avai réussi avant mais maintenant je n'y arrive plus! j'ai oublié comment j'avai fait..
mais merci, je croi avoir compri!
Posté le 14/12/2007 à 21:40 Membre depuis le 09/02/2005, 13736 messages
Bha je t'ai dis, tu teste la position de la balle, et si elle est juste au dessus d'un bout de raquette (dont tu connais les coordonnées a tout moment), bha tu inverse I (qui correspond au deplacement vertical de la balle)
Posté le 18/12/2007 à 18:23 Membre depuis le 25/11/2007, 9 messages
ouai c'est ce que j'ai essayé.. mais ça veu pas marché, quand ça touche la raquette ça me met comme quoi ça sort!
j'ai mis qqch comme "if coordonnés de la balle = coordonné raquette : -I->I"
jcommence à désepsérer! XD
Posté le 18/12/2007 à 18:37 Membre depuis le 09/02/2005, 13736 messages
C'est ca le probleme, il faut inverser quand la coordonnée de la balle est +1 au dessus de la raquette (sinon la balle "rentre" dans la raquette).