from tkinter import * from random import* from math import* fen=Tk() #Definition score score=0 #L'entête vert foncé entete=Canvas(fen,width=500, height=50, bg='darkgreen') entete.grid(columnspan=4, row=0) #La Fenetre fen.title("Snake") canevas=Canvas(fen, width=500, height=500, bg="lightgreen") canevas.grid(columnspan=4,row=1) #Encadrement vert foncé canevas . create_line( 0, 0, 0, 500, width = 12, fill="darkgreen") #gauche canevas . create_line( 503, 0, 503, 503, width = 10, fill="darkgreen") #droite canevas . create_line( 0, 503, 503, 503, width = 10, fill="darkgreen") #bas #Texte score textescore=Label(fen,text="Score:") textescore.grid(column=0,row=0) #Points textepoint=Label(fen,text="0") textepoint.grid(column=1,row=0) #Insertion boutton quitter croix=PhotoImage(file="quitter.png") imagecroix=Button(fen,image=croix,command=fen.destroy) imagecroix.grid(column=3,row=0) #Recommencer def recommencer (): global score, snake, mouv textepoint.config(text=0) score=0 mouv=1 for i in range(0,len(snake)): elem=snake[i] if (elem % 3==0): snake.remove(snake[i]) print (snake) #Insertion boutton recommencer retry=PhotoImage(file="retry.png") imageretry=Button(fen,image=retry,command=recommencer) imageretry.grid(column=2,row=0) #Insertion de la pomme pomme=PhotoImage(file="pomme.png") for i in range(1): x=randint(11,490) y=randint(87,470) apple=canevas.create_image(x,y,image=pomme) #Insertion du serpent carre1=canevas.create_rectangle(200, 200, 190, 190, fill='darkgreen') carre2=canevas.create_rectangle(190, 190, 180, 200, fill='darkgreen') carre3=canevas.create_rectangle(180, 190, 170, 200, fill='darkgreen') snake=[carre1,carre2,carre3] #liste ordre carrés touches = set() def enfoncer(event): touches.add(event.keysym) def relacher(event): try: touches.remove(event.keysym) except: pass #serpent mange la pomme def repas (): global x global y x1pomme=canevas.coords(apple)[0] y1pomme=canevas.coords(apple)[1] x2pomme=canevas.coords(apple)[0]+20 y2pomme=canevas.coords(apple)[1]+20 x1tete=canevas.coords(snake[-1])[0] y1tete=canevas.coords(snake[-1])[1] x2tete=canevas.coords(snake[-1])[2] y2tete=canevas.coords(snake[-1])[3] if ((x1tete > x1pomme and x1tete < x2pomme) or (x2tete > x1pomme and x2tete < x2pomme)) and ((y1tete > y1pomme and y1tete < y2pomme) or (y2tete > y1pomme and y2tete < y2pomme)): x=randint(11,490) y=randint(87,470) canevas.coords(apple,x,y) scorePlusUn() agrandirSerpent() #Score def scorePlusUn(): global score score+=1 textepoint.config(text=score) #Serpent qui s'agrandit def agrandirSerpent(): if (direction=="gauche"): x0=canevas.coords(snake[-1])[0]-10 y0=canevas.coords(snake[-1])[1] x1=canevas.coords(snake[-1])[0] y1=canevas.coords(snake[-1])[1]+10 snake.append(canevas.create_rectangle(x0,y0,x1,y1, fill="darkgreen")) if (direction=="droite"): x0=canevas.coords(snake[-1])[0]+10 y0=canevas.coords(snake[-1])[1] x1=canevas.coords(snake[-1])[0] y1=canevas.coords(snake[-1])[1]+10 snake.append(canevas.create_rectangle(x0,y0,x1,y1, fill="darkgreen")) if (direction=="haut"): x0=canevas.coords(snake[-1])[0] y0=canevas.coords(snake[-1])[1]+10 x1=canevas.coords(snake[-1])[0]+10 y1=canevas.coords(snake[-1])[1] snake.append(canevas.create_rectangle(x0,y0,x1,y1, fill="darkgreen")) if (direction=="bas"): x0=canevas.coords(snake[-1])[0] y0=canevas.coords(snake[-1])[1]+10 x1=canevas.coords(snake[-1])[0]+10 y1=canevas.coords(snake[-1])[1] snake.append(canevas.create_rectangle(x0,y0,x1,y1, fill="darkgreen")) def MouvSnake(): global direction, mouv, snake if ("Left" in touches) and (direction!="droite"): direction="gauche" elif ("Right" in touches) and (direction!="gauche"): direction="droite" elif ("Up" in touches) and (direction!="bas"): direction="haut" elif ("Down" in touches) and (direction!="haut"): direction="bas" if direction=="gauche": gauche() elif direction=="droite": droite() elif direction=="haut": haut() elif direction=="bas": bas() repas() if (canevas.coords(snake[-1])[2]>=501) or (canevas.coords(snake[-1])[1]<=-1) or (canevas.coords(snake[-1])[0]<=-1) or (canevas.coords(snake[-1])[3]>=501): gameover() if mouv==1: fen.after(70, MouvSnake) if mouv==0: fen.after(0,MouvSnake) #Si serpent touche bord=game over def gameover (): global mouv mouv=0 #Evènement clavier def droite(): global snake if (canevas.coords(snake[-1]))[2]<=500: x0=canevas.coords(snake[-1])[0] y0=canevas.coords(snake[-1])[1] x1=canevas.coords(snake[-1])[2] y1=canevas.coords(snake[-1])[3] canevas.coords(snake[0],x0+10,y0,x1+10,y1) tmp=snake[0] del snake[0] snake.append(tmp) def gauche(): global snake if (canevas.coords(snake[-1]))[0]>=0: x0=canevas.coords(snake[-1])[0] y0=canevas.coords(snake[-1])[1] x1=canevas.coords(snake[-1])[2] y1=canevas.coords(snake[-1])[3] canevas.coords(snake[0],x0-10,y0,x1-10,y1) tmp=snake[0] del snake[0] snake.append(tmp) def haut(): global snake if (canevas.coords(snake[-1]))[1]>=0: x0=canevas.coords(snake[-1])[0] y0=canevas.coords(snake[-1])[1] x1=canevas.coords(snake[-1])[2] y1=canevas.coords(snake[-1])[3] canevas.coords(snake[0],x0,y0-10,x1,y1-10) tmp=snake[0] del snake[0] snake.append(tmp) def bas(): global snake if (canevas.coords(snake[-1]))[3]<=503: x0=canevas.coords(snake[-1])[0] y0=canevas.coords(snake[-1])[1] x1=canevas.coords(snake[-1])[2] y1=canevas.coords(snake[-1])[3] canevas.coords(snake[0],x0,y0+10,x1,y1+10) tmp=snake[0] del snake[0] snake.append(tmp) def demarage(): #Enclencher le mouvement du snake en appuyant sur n'importe quelle touches if enfoncer: MouvSnake() direction="droite" mouv=1 MouvSnake() fen.bind("",enfoncer) fen.bind("",relacher) fen.mainloop()