Page 1 of 1

[Axe] Pb code pour rebond en Axe

Unread postPosted: 27 May 2018, 09:59
by juan_30
Bonjour,
Je m'amuse à faire des petits bouts de code...pour faire plus gros un jour :) (un jour...)
Là, il s'agit d'une balle rebondissante...un truc tout simple. Le code fonctionne en gros les dix premiers rebonds, c'est pas très joli, mais bon, je demande juste que ça rebondisse pour l'instant. Et puis, allez savoir pourquoi, ma balle décide de s'envoler, tout doucement elle remonte l'écran puis finit par disparaître...
Et je vois pas pourquoi pas...
Alors si quelqu'un a cinq minutes à perdre et peut m'éclairer sur le sujet, ben ce serait avec grand plaisir. :)
Merci

Voilà le code, et aussi en fichier :
Code: Select all
.BOUNCEX

.definition de la balle
[00183C4E4E3C1800]->Pic1

ClrHome
DiagnosticOff

.coordonnees de depart
48->X:40->Y
.acceleration, sens
0->V:1->S


Repeat getKey(54)
   
   Repeat ((Y<=39) or (Y>=64))
      CAL()
   End
   .inversion du sens
   ~S->S
   CAL()
End

.fonction de calcul coordonnees et affichage
Lbl CAL
S*V+Y->Y
V+S->V
Pause 100
ClrDraw
Pt-On(X,Y,Pic1
DispGraph

Re: Pb code pour rebond en Axe Parser

Unread postPosted: 27 May 2018, 10:59
by Hayleia
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 :
Image

Re: Pb code pour rebond en Axe

Unread postPosted: 27 May 2018, 11:24
by juan_30
Wouah... j'en ai pris pour mon grade ! :) ... de petit débutant. Mais au moins, la leçon porte tout de suite :)
Bon, pour les Pic1 et autres parenthèses, désolé, mais là, je suis la méthode Kindermoute (et je suis bien content d'avoir ce tutoriel pour commencer).
En tout cas un grand merci pour ta réponse, particulièrement instructive. (tu devrais songer à faire un tutoriel...entre ton style et tes connaissances, pas de doute qu'il aurait un grand succès).

Re: Pb code pour rebond en Axe

Unread postPosted: 27 May 2018, 11:33
by Hayleia
juan_30 wrote:Wouah... j'en ai pris pour mon grade ! :) ... de petit débutant. Mais au moins, la leçon porte tout de suite :)
Bon, pour les Pic1 et autres parenthèses, désolé, mais là, je suis la méthode Kindermoute (et je suis bien content d'avoir ce tutoriel pour commencer).

Oui oui, excuse si ça paraissait un peu rude, mais ce n'était pas censé être méchant :P
J'imagine bien que tout le monde ne sait pas tout dès le premier contact avec le langage mais justement, je voulais profiter de ma correction de ton code pour préciser quelques choses qui pourraient t'être utile (comme par exemple ne pas utiliser Pic1 quand on peut mettre des noms lisibles, ça aide quand on fait de gros programmes) plus tard.

juan_30 wrote:(tu devrais songer à faire un tutoriel...entre ton style et tes connaissances, pas de doute qu'il aurait un grand succès).

Il y aurait peut être eu un grand succès en 2012, mais là il n'y a plus grand monde qui recherche des tutos d'Axe.