1
Bonjour à tous, je suis un petit nouveau (une demi-heure de programmation à mon actif !). J'ai créé un jeu snake qui marche bien, mais je voudrais savoir comment faire pour que le serpent avance tout seul et qu'il soit plus long de 1 pixel à chaque fois qu'il mange une pomme. Pourriez vous m'aider s'il vous plaît ?
Ça doit être une évidence pour vous mais comprenez moi, je n'ai que très peu d'expérience rotfl
Merci d'avance.
2
Bonjour, aider en soit ne pose pas de problème, mais si tu ne donne pas le code du programme, je ne vois pas comment on peut t'aider à modifier ton programme vu qu'on ne sait pas ce qui est déjà fait.

Sandro
3
Ah oui en effet donc voici le code que j'ai pour l'instant rentré (excusez moi ça risque d'etre le. Bordel vu mon experience) :
ClrHome
LblZ
ClrHome
Menu("SNAKE","JOUER",1,"HIGHSCORE"',2,"QUITTER",3)
GotoZ
Pause
Lbl3
...
Lbl2
...
Lbl1
ClrDraw
AxesOff
0->Xmin
94->Xmax
0->Ymin
62->Ymax
Horizontal 0
Horizontal 62
Vertical 0
Vertical 94
47->X
31->Y
0->L
RandInt(1,93)->I
RandInt(1,61)->J
Pxl-On(J,I)
Lbl B
While pxl-test(Y,X)=0
Pxl-On(Y,X)
Getkey
If Ans:Ans->K
X-(K=24)+(K=26)->X
Y+(K=34)-(K=25)->Y
L+1->L
End
If X=I and Y=J
Then
Pxl-Off(J,I)
RandInt(1,93)->I
RandInt(1,61)->J
While pxl-test(J,I)=1
RandInt(1,93)->I
RandInt(1,93)->J
End
Pxl-On(J,I)
L+10->L
GotoB
Else
If L>U
L->U
End
Disp "PERDU"
Clr Home
... (affichage du score)


Voilà, merci d'avoir essayé de me suivre
4
Bonjour,
pour commencer, est tu sur que une fois lancé, le serpent s'arrete quand on lache les flèches?
Sinon, pour gérer l'allongement, il faudrait d'abbord gérer l'éffacement de la queu du serpant, et pour ça il te faut stoquer toute les positions du serpant dans des listes.

Sandro
5
Non le serpent continue même lorsqu'on lache les flèches (ça j'ai trouvé comment faire), ce n'est pas mon problème, ceque je voudrais c'est en effet gérer l'effacement du serpent, j'imagine qu'il doit falloir utiliser les listes mais je ne sais pas comment faire, et puis en augmenter la longueur lorsqu'une pomme est mangée.

(Oui en effet je viens de me rendre compte que je me suis trompé de mot dans mon premier post, je voulais dire que le serpent s'efface tout seul pardon)
6
Salut,

J'ai fait un serpent moi aussi y a longtemps.
Mais j'avais des problème d'optimisation (vitesse).
Ce que je faisais c'est enregistrer toutes les valeurs en x dans L1 et toutes les valeurs en y dans L2.
Du coup tu as un index courant (par exemple prenons 12 si le serpent a deja effectué quelques déplacement).
Tu auras donc l'emplacement courant en (L1(12), L2(12)) et le dernier emplacement en (L1(11), L2(11)) etc...
Ensuite lorsque tu commences, tu as une longueur 0, donc tu effaces l'emplacement (L1(index-1), L2(index-1)) avec index qui valait donc 12 dans notre exemple.
Puis tu manges une pomme et tu as une longueur 1 par exemple donc tu effaces la valeur (L1(index-2), L2(index-2)).
Pour éviter que ta liste explose, il faut que tu te donnes un valeur max (100 par exemple) et donc gérer les bords de la liste comme si c'était une liste qui n'avait pas de longueur limitée (donc tester les dépassements si > 100 alors aller en 1, si < 1 alors aller en 100 etc...)
Pour donner une taille à une liste : 100 -> dim(L1)

Ensuite pour les collisions, la solution naïve mais imparfaite consiste à tester la tête avec les valeurs entre taille de la queue->tête-1
Donc pour une queue de taille 2 tu testes (L1(index-3), L2(index-3)), (L1(index-2), L2(index-2)), (L1(index-1), L2(index-1)). enfin tu comprends le principe smile

Ah mais je vois que tu utilises l'écran graphique... Tout est plus simple alors pour les collisions smile
Utilise pixel test tout simplement (mes problèmes d'optimisation venaient du fait qu'il n'y a pas de pixel test dans l'écran Home).
Mais je me dis que tes listes risquent d'être grandes (2 listes de dimension 6144 si je ne dis pas de bêtise...)
Une autre solution pour le queue serait de garder les changements des direction plutôt que les places successives.
Il y a aussi les matrices, mais les opérations sur les matrices sont trèèès lentes sad


J'espère t'avoir aidé un petit peu grin


7
pour les listes sauf si c'est une TI82 non stats ou inférieur, il n'y a pas grand risque de déppassement, on peut faire rentrer 999 termes dans chaques.

Sandro
8
Merci de cette aide qui me sera précieuse. Je vois à peu près les bases de ce qu'il faut faire,mais je suis pas sur d'avoir tout compris sur la fin, je vais chercher demain quand je vais essayer de rentrer tout ça sur ma calculatrice

Sinon, même avec ma ti 83+ m'annonce une erreur mémoire lorsque je veux stocker plus de 600 valeur...
9
c'est que tu n'a pas assez de mémoire libre : archive quelques programmes et ça ira (il te faut 9 octets par terme de la liste pour la stoquer (en ram)).

Sandro
J'ai essayé sur ma calculatrice et ça marche (par contre j'ai effacé le programme par erreur T_T ), merci de cette aide Contra.

Merci Sandro de ce conseil parce que c'est plutôt gênant j'ai du faire mon contrôle de maths avec la calculatrice de mon voisin, une casio ...
je comprend pas trop le rapport avec le fait que tu doive faire le control avec la casio du voisin : tu archive ton programme et tes listes (les listes tu peut aussi les supprimer ou les vider), et tu désarchive tes programmes de cours : c'est où le problème?
salut, j'ai la ti83plus et j'aimerais savoir les traduction en francais parceque je trouve pas readint merci d'avance!!