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
Ah mais je vois que tu utilises l'écran graphique... Tout est plus simple alors pour les collisions
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
J'espère t'avoir aidé un petit peu