Bonjour,

Je me suis lancé dans la réalisation d'une IA pour le Snake. Je réalise d'abord le jeu en lui-même, mais je débute en python et surtout en Tkinter... J'ai quelques problèmes qui, je pense, peuvent être résolus facilement mais malgré de nombreuses recherches je n'ai pas trouvé/compris les différents outils pour y arriver.
1) Je ne sais pas comment arrêter le programme selon la sortie de la fonction "verif".
2) Comment faire une sorte de boucle en continu pour que le snake avance tant que l'on a pas préssé de touche
Voici mon code:
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
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
from tkinter import *
from random import randint
 
def mouvement(dir):
    global snakeList, snakeCan, appleList, appleCan
 
    dx,dy=dir[0],dir[1] #On récupère la direction selon les axes x et y
    hX,hY=snakeList[0][0],snakeList[0][1] #Coordonées du pixel superieur gauche de la tête
    snakeCan=[can.create_rectangle(hX+10*dx, hY+10*dy, hX+dx*10+10, hY+10*dy-10, fill='white')]+snakeCan #Ajout d'une nouvelle tête
    snakeList=[[hX+10*dx, hY+10*dy]]+snakeList #Actualisation des coordonées de la tête
 
 
    if not snakeList[0]==appleList: #Si la tête n'est pas sur la pomme alors on n'aggrandit pas le serpent
        #Suppression de la queue dans la liste et sur le plateau de jeu
        del snakeList[-1]
        can.delete(fen,snakeCan[-1])
        del snakeCan[-1]
    else: #Sinon supprime la pomme et on en recrée une
        can.delete(fen,appleCan)
        pX=randint(1,29)*10
        pY=randint(1,20)*10
        appleCan=can.create_oval(pX,pY,pX+10,pY-10,fill="lightgreen")
        appleList=[pX,pY]
    print(snakeList)
    return None
 
def verif(): #A-t-on perdu ?
    global snakeList
    if snakeList[0][0]>290 or  snakeList[0][0]<0 or  snakeList[0][1]<0 or  snakeList[0][1]>290: #On regarde si le serpent est sortit
        return False
    for c in range(0,len(snakeList)-1): #Ou bien si il se mange lui-même
        if snakeList[c]==snakeList[0]:
            return False
    return True
 
def Up(event):
    return mouvement([0,-1])
def Down(event):
    return mouvement([0,1])
def Right(event):
    return mouvement([1,0])
def Left(event):
    return mouvement([-1,0])
 
#Affichage
fen=Tk() #Création de la fenêtre
 
fen.title("Snake") #Titre a la fenêtre
can=Canvas(fen, width=300, height=300, bg="black") #Création du canevas
can.pack(side=TOP) #Placement du canevas
 
#Création des coordonées pour la position initiale du serpent et de la pomme
posY=150
posX=150
pX=randint(0,29)*10 #On est sur une grille de 30*30 cases de dimension 10*10 pix
pY=randint(0,29)*10
 
#Création du serpent sur le cannevas et dans une liste
global snakeList, snakeCan, appleList, appleCan
snakeList, snakeCan=[],[]
 
for dl in range(0,30,10): #Taille initiale: 3 cases
    snakeCan.append(can.create_rectangle(posX+dl, posY, posX+dl+10, posY-10, fill='white'))
    snakeList.append([posX+dl, posY])
 
#Création de la pomme dans le cannevas et dans une liste    
appleCan=can.create_oval(pX,pY,pX+10,pY-10,fill="lightgreen") 
appleList=[pX,pY]
 
bouton_quitter=Button(text="Quitter",command=fen.destroy)
bouton_quitter.pack(side=BOTTOM)
 
fen.bind("<Up>", Up) # Flèche haut
fen.bind("<Down>", Down) # Bas
fen.bind("<Left>", Left) # Gauche
fen.bind("<Right>", Right) # Droite
 
fen.mainloop()
Si vous avez quelques pistes/idées je suis preneur car la je bloque...

J'espère que vous pourrez m'aider,
Merci d'avance.