Alors tout d'abord l'organisation de ton code n'a aucun sens. Une fonction qui comme son nom l'indique calcule des coordonnées et affiche, c'est une mauvaise idée. Tu me diras que c'était pour l'appeler deux fois... oui mais pourquoi ? Ça ne sert à rien de l'appeler ligne 22 puisqu'elle va rapidement être appelée ligne 18 puisqu'il s'agit de boucles partout. Et sinon, on n'est pas en 2012, tu peux mettre jusqu'à 13 caractères dans tes noms de labels.
Ensuite "Pic1" ça ne veut rien dire. Ce n'est pas parce que des gens (qui ne connaissent rien à l'Axe) disent que l'Axe est illisible qu'il faut écrire de l'Axe illisible. J'ai donc utilisé "°TheBall" comme nom pour la sprite de la balle dans mon code.
Par ailleurs, on n'est pas en Basic. Omettre les parenthèses finales comme à la ligne 31 ne fait que mystifier le compilateur sans produire un code compilé plus petit. À la limite si tu codes sur une 83+ régulière (pas une 83+.fr USB), je peux comprendre l'économie d'octets sur le code source, mais dans les autres cas c'est juste une mauvaise pratique.
On n'est pas non plus en Lisp, il y a un certain nombre de parenthèses inutiles sur la ligne 17, du coup ça ne servait à rien d'en économiser 1 ligne 31.
Je conseille aussi de mettre le Return final. Certes le compilateur le mettra lui même, mais et alors ? Le jour où tu vas ajouter une autre "fonction" en dessous de CAL, tu vas oublier de mettre un return entre CAL et cette "fonction" et tu vas perdre du temps à chercher le bug.
Sinon, "Axe Parser" est le nom du compilateur, pas du langage, qui est juste "Axe", donc le titre de ton thread était incorrect (j'ai corrigé).
Enfin concernant ton problème, si tu regardes mieux, la balle ne s'envole pas juste tout doucement, elle vibre. Parce qu'elle est passée trop loin en dessous de 39, du coup elle change de sens mais à la frame d'après elle ne redescend pas au dessus de 39, du coup elle rechange de sens tout de suite, et ensuite elle fait continuellement ça, changer de sens sans jamais revenir dans la fenêtre 39-64, donc elle monte en vibrant. D'où ma correction, un vieux min(max()) pour restreindre Y entre 40 et 63.
Proposition de code :
- Code: Select all
.BOUNCEX
.definition de la balle
[00183C4E4E3C1800]->°TheBall
ClrHome
DiagnosticOff
.coordonnees de depart
48->X:40->Y
.acceleration, sens
0->V:1->S
Repeat getKey(54)
Repeat Y<=39 or (Y>=64)
S*V+Y->Y
V+S->V
Pause 100
ClrDraw
Pt-On(X,Y,°TheBall)
DispGraph
End
max(40,min(63,Y))->Y
.inversion du sens
~S->S
End
Résultat :
