Bonsoir, je code actuellement un PONG et le problème auquel je me heurte est le suivant: je dois gérer les getkey pour déplacer la raquette avec des boucles while et en meme temps faire déplacer la balle en permanence ce qui donne quelque chose comme ça.
Code
Texte en sous-format code
:While 1
:getkey->K
output(X,Y,"°"
While K=0
getkey->K
End
If K=26
Then
L+1->L
End
...
End
jusque là tout va bien le seul problème c'est que la balle ne bouge pas il faut appuyer sur une touche pour que la balle bouge
ce qui rend le jeu impossible.
quelqu'un a t il déjà eu ce soucis et a une éventuelle solution?
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 13 Déc 2013, 23:03
Oui, d'autant que c'est un classique indémodable.
Tu dois sauvegarder la direction dans d'autres variables que celle de la saisie, les mettre à jour avec K et les utiliser à chaque tour de boucle pour effectuer le déplacement.
Tu n'as pas besoin de Then et End quand il y a une seule action.
Le plus simple pour y parvenir est de stocker des variables de Pas +1/-1 qui seront ajoûtées aux coordonnées régulièrement.
Et utiliser K lorsqu'il est non-nul pour modifier les Pas.
Code
5->X
5->Y
0->A
0->B
While 1
getkey->K
output(Y,X,"°
// actualisation des pas
If K=26
1->A
If K=24
-1->A
If K=25
-1->B
If K=34
1->B
// déplacement, et sécurité pour ne pas sortir de l'écran
// test de sécurité : If X+A<16 and X+A>1
X+A->X
// test de sécurité : If Y+B<8 and Y+B>1
Y+B->Y
End
On peut aussi stocker K dans une variable et déterminer les pas à chaque fois comme si c'était K.
Code
5->X
5->Y
0->M
While 1
getkey->K
output(Y,X,"°
// actualisation de la direction
If K // revient à dire K non nul
K->M
// déplacement, et sécurité pour ne pas sortir de l'écran
If M=24 // et en plus: and X+A>1
X-1->X
If M=26 // et en plus: and X+1<16
X+1->X
If M=25 // et en plus: and Y-1>1
Y-1->Y
If M=34 // et en plus: and Y+1<8
Y+1->Y
End
Et il existe diverses manières d'optimiser. Je peux en indiquer certaines si on me demande, je ne veux pas embrouiller pour rien.
Je rappelle que le nouveau forum Tout82.forumactif.org est disponible et contient quelques ressources plus à jour que le forum original ici présent.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 14 Déc 2013, 10:36
Presque.
Tu dois utiliser autre chose que K=26 pour maintenir le déplacement, par exemple M=26.
J'ai déjà donné deux exemples.
Tout cela revient à créer une mémoire de la dernière commande de direction puis effectuer le déplacement en fonction de la mémoire.
ERRATUM: j'ai mal écrit une ligne dans le second exemple que je corrigerai immédiatement : If L=34Y+1<8
Je change le nom de L en M pour éviter une quelconque confusion entre ton exemple et le mien.
Je place les tests de sortie d'écran en commentaire.
Si tu tiens à empêcher des actions si aucune touche n'est pressée, alors tu peux placer une boucle "Repeat K" autour des actions systématiques (celles qui sont effectuées à chaque tour), et du getKey ; puis placer en dehors de ce repeat ce qui dépend d'une pression de touche.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)