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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| from tkinter import *
class Application(Tk):
''
def __init__(self):
''
Tk.__init__(self)
self.width, self.height = 400, 400
self.flag = 0
self.dx, self.dy = 1, 0
self.can = Canvas(self, width= self.width, height= self.height, bg= 'blue')
self.can.pack(side= TOP)
Button(self, text= 'Start', command= self.start).pack(side= LEFT)
Button(self, text= 'Stop', command= self.stop).pack(side= LEFT)
Button(self, text= 'Quit', command= self.destroy).pack(side= LEFT)
self.bind('<Left>', self.left)
self.bind('<Right>', self.right)
self.bind('<Up>', self.up)
self.bind('<Down>', self.down)
self.serpent()
def start(self):
''
if self.flag == 0:
self.flag = 1
self.move()
def stop(self):
''
self.flag = 0
def left(self, event= None):
''
if self.dx == 0:
self.dx, self.dy = -1, 0
def right(self, event= None):
''
if self.dx == 0:
self.dx, self.dy = 1, 0
def up(self, event= None):
''
if self.dy == 0:
self.dx, self.dy= 0, -1
def down(self, event= None):
''
if self.dy == 0:
self.dx, self.dy = 0, 1
def serpent(self):
''
x, y, self.cc = 20, 20, 10
self.serp = []
for t in range(4):
carre = self.can.create_rectangle(x, y, x+self.cc, y+self.cc, fill= 'green')
self.serp.append([carre, x, y])
x += self.cc
def move(self):
''
# Référence du carré de queue:
ref_cq = self.serp[0][0]
# Coordonnées du carré de tête:
xt, yt = self.serp[-1][1], self.serp[-1][2]
# Coordonnées du nouveau carré de tête:
self.xq, self.yq = xt+self.dx*self.cc, yt+self.dy*self.cc
# Limites du canevas:
if self.xq < 15 or self.xq > self.width-15 or self.yq < 15 or self.yq > self.height-15:
self.flag = 0
# Déplacement effectif du carré de queue en carré de tête:
self.can.coords(ref_cq, self.xq, self.yq, self.xq+self.cc, self.yq+self.cc)
# Mémorisation dans la liste de ce nouveau carré de tête:
self.serp.append([ref_cq, self.xq, self.yq])
# Retrait de la liste de l'ancien carré de queue:
del(self.serp[0])
if self.flag > 0:
self.after(50, self.move)
Application().mainloop() |
Partager