Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Aide pour mon snake :s
snap le 04/06/2011 à 11:39
Ben voila. J'ai fait un snake... Enfin j'ai essayé. Il marche pour l'instant mais il va pas assez vite. En fait il est super lent même^^ Alors je voudrais savoir pourquoi XD Voila le prog
Snake :
Code
:EffDessin
:Menu("Snake","jouer",J,"Quitter",Q
:lbl Q
:Stop
:lbl J
:0 -> Xmin : 94 -> Xmax
:0 -> Ymin : 62 -> Ymax
:FonctOff
:AxesNAff
:Verticale 0
:Verticale 94
:Horizontale 0
:Horizontale 62
:6 -> dim(LSNA
:6 -> dim(LSNB
:2 -> dim(LSNC
:Remplir(1,LSNA
:Remplir(1,LSNB
:30 -> LSNA(1
:40 -> LSNB(1
:lbl 1
:If LSNA(1)=B et LSNB(1)=A: S+1 -> S Pour le score.
:Entaléat(1,93 -> A
:Entaléat(1,61 -> B
:Pt-On(A,B
:If S>0: dim(LSNA)+2 -> dim(LSNA
:If S>0: dim(LSNB)+2 -> dim(LSNB
:While 1
:For(C,dim(LSNA)-1,1,-1
:LSNA(C -> LSNA(C+1
:End
:LSNA(1)+LSNC(1 -> LSNA(1
:For(C,dim(LSNB)-1,1,-1
:LSNB(C -> LSNB(C+1
:end
LSNB(1)+LSNC(2 -> LSNB(1
:Pt-On(LSNB(1),LSNA(1
:PT-Off(LSNB(dim(LSNB)),LSNA(dim(LSNA
:CodeTouche -> K
:If K:Remplir(0,LSNC
:If K=21: Pause
:If K=24: LSNC(2)-1 -> LSNC(2
:If K=25: LSNC(1)+1 -> LSNC(1
:If K=26: LSNC(2)+1 -> LSNC(2
:If K=34: LSNC(1)-1 -> LSNC(1
:If LSNA(1)=B et LSNB(1)=A : Goto 1
:End
J'ai pas encore mis les test pour perdre mais vu que c'est deja lent sans, ce sera horrible avec ^^
noelthebest le 04/06/2011 à 12:03
Je pense que tu pourrais encore optimiser au niveau de le gestion des évènements (autrement dit, au niveau des codetouches ).

linkakro le 04/06/2011 à 13:56
La pire des causes de ralentissement à long terme est le "Goto 1" à l'intérieur d'une boucle "while 1".
L'autre raison principale est qu'une de ces boucles For déplace les valeurs de toute la liste. Plus il y a de valeurs dans la liste et plus c'est lent.
Il y a plusieurs façons de remplacer ce For mais certaines sont des usines à gaz.
-- Les valeurs de la liste ne bougent pas, mais une position de référence est constamment modifiée. Il y a de nombreuses façon d'obtnir ça. If, formules.
-- Utilise un petit bug de ti : SortA(L1,L2) ou TriCroi déplace toutes les valeurs de la liste L2 d'un cran si L1 est uniforme (genre vide).
On peut aussi stocker deux valeurs dans une même liste avec ent et partDéc. Ainsi une seule boucle effectue le double de travail.
Tu devrais utiliser deux variables plutôt que d'utiliser la liste LSNC, car les listes sont plus lentes que les variables.
----
Je serai certainement plus précis quand je trouverai le temps d'écrire un article sur ce domaine.sandro le 04/06/2011 à 14:27
Met déjà la verrification de repas dans la boucle pricipale (sans le goto) et sinon, si tu n'arrive pas à accélérer sufisament, au lieux de constituer ton serpent de carrés de 1*1 pixels, fais le avec des 2*2 pixels. Sinon, remplace peut-être aussi les listes personalisées par des liste standart, je crois que c'est un peu plus rapide.
Sandrosnap le 04/06/2011 à 14:45
J'ai pas très bien compris pour le bug ti avec Tricroi. J'ai test de mettre
Tricroi(L3,L1 avec L3 vide mais il me met erreur.
Sandro : C'est ce que je comptais faire mais faudrait deja que je l'accelere un petit peu avant de voir salinkakro le 04/06/2011 à 14:55
Je me suis mal exprimmé : vide signifiait pleine de zéros.
Mais bien sûr les listes doivent avoir la même dimmension.
Note que le défilement produit par TriCroi ne se fait que dans un sens

C'est plus rapide qu'un For mais pas toujours aussi rapide que les référentiels.
sandro le 04/06/2011 à 14:57
si tu double les dimentions du serpent, il avancera presque 2 fois plus vite (car il progressera de 2 pixels à chaque coup au lieux d'un seul.
Sandrosnap le 04/06/2011 à 14:58
Pas bête pas bête... ^^
Linkakro, Sa ne marche pas

pourrait tu mettre un code du bug? Je dois surement avoir fait une erreur
linkakro le 04/06/2011 à 15:27
Code
{0,0,0}->L1
{1,2,3}->L2
TriCroi(L1,L2
L1={0,0,0}
L2={2,3,1}
snap le 04/06/2011 à 15:57
J'ai test et sa marche pas :p sa donnerai quoi dans mon programe ce que ta mis?linkakro le 04/06/2011 à 16:39
Cela devrait décaler toutes les valeurs de la liste vers le début.
Pour l'instant ton programme prévoie de les décaler vers la fin.
Le défaut de cette astuce est qu'elle nécessite de modifier d'autres choses du programme.
Ce bug fonctionne sur 82, 83, 83+. Pas testé sur les autres. Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.