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() |
Partager