Bonjour à tous.tes,

J'ai commencé ce week-end le dernier exercice du "Swinnen" concernant "Tkinter", il s'agit du jeu du serpent.
Avant de trop m'avancer dans celui-ci, j'aurai besoin d'un avis éclairé.

Je crée et je déplace les vertèbres du serpent les une après les autres en exécutant la fonction déplace, créant ainsi une boucle à chaque vertèbre.
Je commence à avoir du mal à dresser la bestiole.
Ne serait t'il pas plus judicieux de déplacer toutes les vertèbres à partir de la même boucle ?

Voici une première ébauche (fonctionnelle) avec une boucle par vertèbre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# imports
from tkinter import Tk, Canvas
from random import randrange
 
# fonctions
def deplace(numVertebres=0):    
    'déplace une vertebre du serpent'
    can.coords(vertebres[numVertebres-1], can.coords(vertebres[numVertebres])) # dernière vertebre remplace première
    if direction == 'Up': can.move(vertebres[numVertebres], 0, -20)
    if direction == 'Right': can.move(vertebres[numVertebres], 20, 0)
    if direction == 'Left': can.move(vertebres[numVertebres], -20, 0)
    if direction == 'Down': can.move(vertebres[numVertebres], 0, 20)
 
    can.after(500, deplace, numVertebres) # multiples executions différées
 
# gestionnaires d'événements
def toucheDir(event): 
    global direction
    'detection des touches de direction'
    direction = event.keysym
 
# programme principal
fen = Tk()
direction = 'Right' # direction initiale du serpent
 
# widgets
can = Canvas(fen, width =200, height =200, bg ='ivory')
can.pack()
can.bind('<Key>', toucheDir)
can.focus_set ()
 
for i in range(10): # placement aléatoire des pions
        x, y = randrange(40, 180, 40), randrange(40, 180, 40)
        can.create_oval(x, y, x+20, y+20, fill='red')
 
vertebres = list() # initialisation du serpent
for i in range(10): 
     vertebres.append(can.create_rectangle(-20, 0, 0, 20, fill='light green'))
can.itemconfigure(vertebres[4], fill ='dark green')
 
for i in range(5) : # lance le déplacement du serpent
    deplace(i)
 
# réceptionnaire d'événements
fen.mainloop()