Bah ça te permet de ne tracer que ce qui est dans le repère donc c'est plus ou moins acceptable, mais par exemple si tu mets dim=2, que le serpent est au point (1,2) et que le programme trace le segment (1,2)->(1,3), ça va sortir de ton repère (même si il va peut-être y revenir plus tard), alors que dans l'énoncé le serpent doit rester dans la grille je pense.
Du coup il faudrait faire quelque chose comme ça pour chaque boucle :

Après il y a probablement une meilleure méthode mais je ne vois pas trop.
Par contre, je ne sais pas si ça respecte l'équiprobabilité de faire comme ça (annuler l'action) parce que normalement, si le serpent est sur un bord il a 3 déplacements possibles et s'il est complètement dans un coin il n'a plus que 2 déplacements possibles sauf que du coup il faudrait envisager toutes les possibilités et ce serait beaucoup trop long comme algorithme...