diff --git a/programme_foule_float_avec_pilier__local_.py b/programme_foule_float_avec_pilier__local_.py
new file mode 100644
index 0000000000000000000000000000000000000000..04d9ea96903393af33136d49a4760a61a87f83ed
--- /dev/null
+++ b/programme_foule_float_avec_pilier__local_.py
@@ -0,0 +1,689 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Fri May 20 16:38:09 2022
+
+@author: Arthur
+"""
+
+run_actif = 0
+import random as rand
+from math import *
+from tkinter import *
+from time import *
+from copy import *
+def fenetre (n,m,nombre_de_personnes,taille_personnes,taille_sortie) :
+    # n est la hauteur (distance verticale) et m la longueur (distance horizontale)
+    # taille_personnes est le DIAMÈTRE des cercles
+    global run_actif
+    global temps
+    global Foule_precedente
+    temps = 0
+    delta_t = 0.1
+    fen_princ = Tk()
+
+    fen_princ.title("ESSAI AVEC CANVAS")
+
+    fen_princ.geometry(str(n+200)+"x"+str(m))
+    
+    DISTANCE_PILIER = 110
+    RAYON_PILIER = 30
+    
+
+    monCanvas = Canvas(fen_princ, width=n, height=m, bg='white')
+    monCanvas.grid(row=0,column=0, padx=10,pady=10)
+    monCanvas.create_line(25,25,25,m-25, width=2, fill="black")
+    monCanvas.create_line(n-25,m-25,25,m-25, width=2, fill="black")
+    monCanvas.create_line(n-25,m-25,n-25,m//2+taille_sortie//2, width=2, fill="black")
+    monCanvas.create_line(n-25,25,n-25,m//2-taille_sortie//2, width=2, fill="black")
+    monCanvas.create_line(25,25,n-25,25, width=2, fill="black")
+    
+    porte = [n-25, m//2-taille_sortie//2, n-25, m//2+taille_sortie//2] # coordonnées de la porte
+    
+    sortie = [porte[0], m//2] # sortie sur l’axe horizontal
+    cible_bas = [n-25, min((porte[3] + sortie[1]) / 2, porte[3] - taille_personnes/2)]
+    cible_haut = [n-25, max((porte[1] + sortie[1]) / 2, porte[1] + taille_personnes/2)]
+    Foule=[]
+    Positions_possibles=[]
+    centre_pilier = [sortie[0]-DISTANCE_PILIER, sortie[1]]
+    coord_pilier = [centre_pilier[0]-RAYON_PILIER,centre_pilier[1]-RAYON_PILIER,]
+    avatar_pilier = monCanvas.create_oval(centre_pilier[0]-RAYON_PILIER,
+                                          centre_pilier[1]-RAYON_PILIER,
+                                          centre_pilier[0]+RAYON_PILIER,
+                                          centre_pilier[1]+RAYON_PILIER,
+                                          width=0,
+                                          fill = "red")
+    
+    cible_bas_pilier = [centre_pilier[0],
+                         centre_pilier[1] + RAYON_PILIER + taille_personnes/2]
+    cible_haut_pilier = [centre_pilier[0],
+                        centre_pilier[1] - (RAYON_PILIER + taille_personnes/2)]
+    
+    
+    def centre(coord):
+        return [coord[0]+(taille_personnes)/2,coord[1]+(taille_personnes)/2]
+    
+    def distance(coord1, coord2):
+        return sqrt((coord1[0]-coord2[0])**2+(coord1[1]-coord2[1])**2) 
+    
+    def produit_scalaire (u,v):
+        return u[0] * v[0] + u[1] * v[1]
+    
+    def norme(u):
+        return sqrt(produit_scalaire(u,u))
+    
+    def angle(u,v):
+        return acos(produit_scalaire(u,v) / (norme(u)*norme(v)))
+     
+        
+    def collision(coord1,coord2):
+        # renvoie un booléen : true si il y a collision ...
+        # ... entre les deux personnes représentées par les coordonées
+        
+        d = distance(coord1,coord2)
+        return d<=taille_personnes
+    
+    def collision_pilier(coord):
+        d = distance(centre(coord), centre_pilier)
+        return (d <= taille_personnes//2 + RAYON_PILIER)
+    
+    for i in range(25,n-24-taille_personnes,taille_personnes):
+        for j in range (25,m-24-taille_personnes,taille_personnes):
+            if not collision_pilier([i,j]):
+                Positions_possibles.append([i,j])
+            
+            
+            # on référence les positions possibles (cadrillage)
+            
+            
+    for k in range(nombre_de_personnes):
+        
+        l=rand.randint(0,len(Positions_possibles)-1)
+        
+        [i,j]=Positions_possibles[l]
+        avatar=monCanvas.create_oval(i,j,i+taille_personnes,j+taille_personnes, width=0, fill="blue")
+        # avatar est le cercle
+        Foule.append([avatar,0,0,i,j])
+        #les quatre nombres associés à l'avatar representent sa vitesse et sa position
+        
+        Positions_possibles = Positions_possibles[:l] + Positions_possibles[l+1:]
+    
+    Foule_precedente = deepcopy(Foule)
+    
+    print(Foule)
+    
+    def centre(coord):
+        return [coord[0]+(taille_personnes)/2,coord[1]+(taille_personnes)/2]
+    
+    def distance(coord1, coord2):
+        return sqrt((coord1[0]-coord2[0])**2+(coord1[1]-coord2[1])**2)
+    
+
+        
+     
+        
+    def collision(coord1,coord2):
+        # renvoie un booléen : true si il y a collision ...
+        # ... entre les deux personnes représentées par les coordonées
+        
+        d = distance(coord1,coord2)
+        return (d<=(taille_personnes))
+    
+    
+        
+        """
+    def deplacement_orthogonal(coord1,coord2):
+        # renvoie la direction du vecteur vitesse du cercle 1 ...
+        # ... lors d'un déplacement orthogonalement à la droite (O1O2)
+        
+        centre1 = centre(coord1)
+        centre2 = centre(coord2)
+        
+        d = distance(coord1, coord2)
+        
+        u=[(centre2[0]-centre1[0])/d,(centre2[1]-centre1[1])/d]
+        # u est le vecteur unitaire qui appartient à la droite reliant centre1 et centre2 dirigée vers 2
+        
+        if u[1]>=0: # on veut que le dx du vecteur ortho soit positif
+            return [5*u[1],-5*u[0]]
+        
+        else:
+            return [-5*u[1],5*u[0]]
+
+        """
+        
+    def deplacement_orthogonal_centres (centre1, centre2, v):
+        d=((sqrt((centre1[0]-centre2[0])**2+(centre1[1]-centre2[1])**2)))
+        u=[(centre2[0]-centre1[0])/d,(centre2[1]-centre1[1])/d]
+        #vecteur unitaire qui  appartient à la droite reliant centre1 et centre2 dirigé vers 2
+        
+        # on sépare le cas où la distance selon x est plus ou moins grande
+        # que la distance selon y
+        distance_x = sortie[0] - centre1[0]
+        distance_y = abs(sortie[1] - centre1[1])
+        if distance_y > distance_x :
+            if centre1[1]<=sortie[1] :
+                if u[0]>=0:
+                    return [-v*u[1],v*u[0]]
+                else:
+                    return [v*u[1],-v*u[0]]
+            else:
+                if u[0]>=0:
+                    return [v*u[1],-v*u[0]]
+                else:
+                    return [-v*u[1],v*u[0]]
+        else:
+            if u[1]>=0: # on veut que le dx du vecteur ortho soit positif
+                return [v*u[1],-v*u[0]]
+            
+            else:
+                return [-v*u[1],v*u[0]]
+    
+    def deplacement_orthogonal(coord1,coord2,v):
+        
+        #déplacement de contournement à la vitesse v
+        
+        centre1 = centre(coord1)
+        centre2 = centre(coord2)
+        return deplacement_orthogonal_centres(centre1, centre2, v)
+        
+        """
+        d=((sqrt((centre1[0]-centre2[0])**2+(centre1[1]-centre2[1])**2)))
+        u=[(centre2[0]-centre1[0])/d,(centre2[1]-centre1[1])/d]
+        #vecteur unitaire qui  appartient à la droite reliant centre1 et centre2 dirigé vers 2
+        
+        # on sépare le cas où la distance selon x est plus ou moins grande
+        # que la distance selon y
+        distance_x = sortie[0] - centre1[0]
+        distance_y = abs(sortie[1] - centre1[1])
+        if distance_y > distance_x :
+            if coord1[1]<=sortie[1] :
+                if u[0]>=0:
+                    return [-v*u[1],v*u[0]]
+                else:
+                    return [v*u[1],-v*u[0]]
+            else:
+                if u[0]>=0:
+                    return [v*u[1],-v*u[0]]
+                else:
+                    return [-v*u[1],v*u[0]]
+        else:
+            if u[1]>=0: # on veut que le dx du vecteur ortho soit positif
+                return [v*u[1],-v*u[0]]
+            
+            else:
+                return [-v*u[1],v*u[0]]
+            """
+
+    """def deplacement_orthogonal_bis(coord1,coord2):
+        
+        centre1 = centre(coord1)
+        centre2 = centre(coord2)
+        
+        d = distance(coord1, coord2)
+        
+        u=[(centre2[0]-centre1[0])/d,(centre2[1]-centre1[1])/d] 
+        #vecteur unitaire qui appartient à la droite reliant centre1 et centre2 dirigée vers 2
+        
+        if u[1]>=0:
+            return [2*u[1],-2*u[0]]
+        else:
+            return [-2*u[1],2*u[0]]"""
+        
+    
+    """def deplacement_simple(): 
+        # déplacement en l’absence de collision (inutile ?)
+        
+        dx=((porte[0] - monCanvas.coords(p1)[0]) / (sqrt(((porte[0]-monCanvas.coords(p1)[0])**2)+((porte[4]-monCanvas.coords(p1)[1])**2))))*5
+        dy=((porte[4]-monCanvas.coords(p1)[1])/(sqrt(((porte[0]-monCanvas.coords(p1)[0])**2)+((porte[4]-monCanvas.coords(p1)[1])**2))))*5
+        dx=int(dx)
+        dy=int(dy)
+        monCanvas.move(p1,dx,dy)
+        fen_princ.after(30,deplacement_simple)"""
+        
+    def listes_egales (L,M):
+        # renvoie True si L et M sont identiques
+        
+        b = True
+        if len(L) == len (M):
+            for i in range (len(L)):
+                b = (b and(L[i]==M[i]))
+            return b
+        else :
+            return False
+        
+        
+    def collision_murs(p, nouvelle_coord, v):
+        if (nouvelle_coord[0]+taille_personnes ) >= (n-25) and ((nouvelle_coord[1]+taille_personnes) >= m//2+taille_sortie//2 or (nouvelle_coord[1])<= m//2-taille_sortie//2): #si p rentre dans un mur
+            nouvelle_coord[0] = (n-25-taille_personnes)
+            #p se colle au mur
+            p[1]= nouvelle_coord[0]- p[3]
+            if p[4]<sortie[1]:
+                p[2]= v
+                #p se déplace vers la sortie
+            else:
+                p[2] = -v
+            nouvelle_coord[1]=p[4]+p[2]
+        if (nouvelle_coord[1] + taille_personnes) >= (m-25):
+            nouvelle_coord[1] = (m-25-taille_personnes)
+            #p se colle en haut de la salle
+            p[2]= nouvelle_coord[1]- p[4]
+            p[1]=v
+            nouvelle_coord[0]=p[1] +p[3]
+        if (nouvelle_coord[1] - taille_personnes) <= 25:
+            nouvelle_coord[1] = (25+taille_personnes)
+            #p se colle en bas de la salle
+            p[2]= nouvelle_coord[1]- p[4]
+            p[1]=v
+            nouvelle_coord[0]=p[1] +p[3]
+            
+        return nouvelle_coord
+    
+        
+    def test_collisions (i, col, p, v, nouvelle_coord):
+        for j in range (nombre_de_personnes) :
+        #on parcourt la Foule pour tester les collisions
+            if i != j and Foule[j] != "sorti":
+                if (collision(Foule[j][3:5],nouvelle_coord)):
+                    col = col +1
+                    if col==1:
+                        direction=deplacement_orthogonal(p[3:5],Foule[j][3:5],v)
+                        p[1]=direction[0]
+                        #on change la direction de p de manière à lui faire contourner l'obstacle
+                        p[2]=direction[1]
+                        nouvelle_coord= [p[3]+p[1],p[4]+p[2]]
+                        
+                        """
+                        # contact avec le mur de la sortie
+                        if (nouvelle_coord[0]+taille_personnes ) >= (n-25) and ((nouvelle_coord[1]+taille_personnes) >= m//2+taille_sortie//2 or (nouvelle_coord[1])<= m//2-taille_sortie//2):                                        #si p rentre dans un mur
+                            nouvelle_coord[0] = (n-25-taille_personnes)
+                            #p se colle au mur
+                            p[1]= nouvelle_coord[0]- p[3]
+                            if p[4]<sortie[1]:
+                                p[2]= v
+                                #p se déplace vers la sortie
+                            else:
+                                p[2] = -v
+                            nouvelle_coord[1]=p[4]+p[2]
+                            
+                        # contact avec le mur du haut
+                        if (nouvelle_coord[1] + taille_personnes) >= (m-25):
+                            nouvelle_coord[1] = (m-25-taille_personnes)
+                            #p se colle en haut de la salle
+                            p[2]= nouvelle_coord[1]- p[4]
+                            p[1]=v
+                            nouvelle_coord[0]=p[1] +p[3]
+                            
+                        # contact avec le mur du bas
+                        if (nouvelle_coord[1] - taille_personnes) <= 25:
+                            nouvelle_coord[1] = (25+taille_personnes)
+                            #p se colle en bas de la salle
+                            p[2]= nouvelle_coord[1]- p[4]
+                            p[1]=v
+                            nouvelle_coord[0]=p[1] +p[3]
+                        """
+                        
+                        nouvelle_coord = collision_murs(p, nouvelle_coord, v)
+                            
+        
+        if (collision_pilier(nouvelle_coord)):
+            col = col +1
+            if col==1:
+                direction=deplacement_orthogonal(centre(p[3:5]),centre_pilier,v)
+                p[1]=direction[0]
+                #on change la direction de p de manière à lui faire contourner l'obstacle
+                p[2]=direction[1]
+                nouvelle_coord= [p[3]+p[1],p[4]+p[2]]
+                
+                """
+                # contact avec le mur de la sortie
+                if (nouvelle_coord[0]+taille_personnes ) >= (n-25) and ((nouvelle_coord[1]+taille_personnes) >= m//2+taille_sortie//2 or (nouvelle_coord[1])<= m//2-taille_sortie//2):                                        #si p rentre dans un mur
+                    nouvelle_coord[0] = (n-25-taille_personnes)
+                    #p se colle au mur
+                    p[1]= nouvelle_coord[0]- p[3]
+                    if p[4]<sortie[1]:
+                        p[2]= v
+                        #p se déplace vers la sortie
+                    else:
+                        p[2] = -v
+                    nouvelle_coord[1]=p[4]+p[2]
+                    
+                # contact avec le mur du haut
+                if (nouvelle_coord[1] + taille_personnes) >= (m-25):
+                    nouvelle_coord[1] = (m-25-taille_personnes)
+                    #p se colle en haut de la salle
+                    p[2]= nouvelle_coord[1]- p[4]
+                    p[1]=v
+                    nouvelle_coord[0]=p[1] +p[3]
+                    
+                # contact avec le mur du bas
+                if (nouvelle_coord[1] - taille_personnes) <= 25:
+                    nouvelle_coord[1] = (25+taille_personnes)
+                    #p se colle en bas de la salle
+                    p[2]= nouvelle_coord[1]- p[4]
+                    p[1]=v
+                    nouvelle_coord[0]=p[1] +p[3]
+                """
+                
+                nouvelle_coord = collision_murs(p, nouvelle_coord, v)
+                
+        return(col,p,nouvelle_coord)
+        
+        
+    def vecteur_direction (coord_personne, coord_cible, v):
+        # renvoie le vecteur direction vers la cible, de norme v
+        
+        centre_personne = centre(coord_personne)
+        d = distance(centre_personne, coord_cible)
+        return [(coord_cible[0] - centre_personne[0]) * (v/d),
+                (coord_cible[1] - centre_personne[1]) * (v/d)]
+    
+    def rotation (v, alpha):
+        [x,y] = v
+        return [cos(alpha) * x - sin(alpha) * y,
+                sin(alpha) * x + cos(alpha) * y]
+    
+    
+    def ciblage(p, v):
+        dx,dy=0,0
+        if p[4]<=(porte[1]) :
+            # au-dessus de la porte
+            [dx, dy] = vecteur_direction(p[3:5], cible_haut, v)
+            
+            angle_min = asin(min( (RAYON_PILIER + taille_personnes/2)/distance(centre(p[3:5]), centre_pilier), 1))
+            # angle minimal pour éviter le pilier
+            
+            alpha = angle([dx,dy], vecteur_direction(p[3:5], centre_pilier, v))
+            if angle_min > alpha and centre(p[3:5])[0] < centre_pilier[0] : # s’il y a collision de la trajectoire avec le pilier
+                [dx, dy] = rotation(vecteur_direction(p[3:5],centre_pilier,v), -angle_min)
+            
+        elif  p[4]+taille_personnes>=(porte[3]):
+            # en-dessous de la porte
+            [dx, dy] = vecteur_direction(p[3:5], cible_bas, v)
+            
+            angle_min = asin(min( (RAYON_PILIER + taille_personnes/2)/distance(centre(p[3:5]), centre_pilier), 1))
+            # angle minimal pour éviter le pilier
+            
+            alpha = angle([dx,dy], vecteur_direction(p[3:5], centre_pilier, v))
+            # angle de la vitesse par rapport à l’axe p - pilier
+            if angle_min > alpha and centre(p[3:5])[0] < centre_pilier[0] : # s’il y a collision de la trajectoire avec le pilier
+                [dx, dy] = rotation(vecteur_direction(p[3:5],centre_pilier,v), angle_min)
+            
+        else:
+            centre_p = centre(p[3:5])
+            if abs(centre_p[1] - sortie[1]) <= RAYON_PILIER + taille_personnes/2 \
+                and centre_p[0] < centre_pilier[0]:
+                # trajectoire qui croise le pilier --> on vise donc une cible_pilier
+                if centre_p[1] <= sortie[1]:
+                    [dx, dy] = vecteur_direction(p[3:5], cible_haut_pilier, v)
+                else:
+                    [dx, dy] = vecteur_direction(p[3:5], cible_bas_pilier, v)
+            else:
+                dy=0
+                dx=v
+        return[dx,dy]
+    
+    def round_down(x, p):
+        y = floor(x * 10**p)
+        return round(y / 10**p, p)
+    
+    def quit () :
+        fen_princ.destroy()
+    
+    # BOUCLE
+       
+    def run () :
+        global run_actif
+        global temps
+        global Foule_precedente
+        
+        if run_actif == 0:
+            run_actif = 1
+            for i in range (nombre_de_personnes) :
+                p=Foule[i] 
+                # p contient l'entité, son vecteur vitesse et sa position
+                # p = [avatar, dx, dy, x, y]
+                
+                
+                
+                if p!="sorti" and (porte[0]-p[3])>(taille_personnes)/2 :
+                    """
+                    if p[4]+taille_personnes/2<=(porte[1]) :
+                        # au-dessus de la porte
+                        [dx, dy] = vecteur_direction(p[3:5], cible_haut, 5)
+                        
+                    elif  p[4]-taille_personnes/2>=(porte[3]):
+                        # en-dessous de la porte
+                        [dx, dy] = vecteur_direction(p[3:5], cible_bas, 5)
+                        
+                    else:
+                        centre_p = centre(p[3:5])
+                        if abs(centre_p[1] - sortie[1]) <= RAYON_PILIER + taille_personnes/2 \
+                            and centre_p[0] < centre_pilier[0]:
+                            # trajectoire qui croise le pilier --> on vise donc une cible_pilier
+                            if centre_p[1] <= sortie[1]:
+                                [dx, dy] = vecteur_direction(p[3:5], cible_haut_pilier, 5)
+                            else:
+                                [dx, dy] = vecteur_direction(p[3:5], cible_bas_pilier, 5)
+                        else:
+                            dy=0
+                            dx=5
+                        #la norme du vecteur vitesse est de 5
+                    """
+                    
+                    [dx,dy] = ciblage(p, 5)
+                    
+                    p[1]=dx
+                    p[2]=dy
+                    nouvelle_coord= [p[3]+dx,p[4]+dy]
+                    #coordonées futur de p si il n'y a pas de collision
+                    
+                    """
+                    if (nouvelle_coord[0]+taille_personnes ) >= (n-25) and ((nouvelle_coord[1]+taille_personnes) >= m//2+taille_sortie//2 or (nouvelle_coord[1])<= m//2-taille_sortie//2):
+                        #si p rentre dans un mur
+                        nouvelle_coord[0] = (n-25-taille_personnes)
+                        #p se colle au mur
+                        p[1]= nouvelle_coord[0]- p[3]
+                        if p[4]<sortie[1]:
+                            p[2]= 5
+                            #p se déplace vers la sortie
+                        else:
+                            p[2] = -5
+                        nouvelle_coord[1]=p[4]+p[2]
+                        #on rentre les coordonées modifiées de p
+                    """
+                    nouvelle_coord = collision_murs(p, nouvelle_coord, 5)
+                    col=0
+                    #nombre de collisions
+                    
+                    """
+                    for j in range (len(Foule)):
+                    #on parcourt la Foule pour tester les collisions
+                        if i != j and Foule[j] != "sorti":
+                            if (collision(Foule[j][3:5],nouvelle_coord)):
+                                col = col +1
+                                if col==1:
+                                    direction=deplacement_orthogonal(p[3:5],Foule[j][3:5],5)
+                                    p[1]=direction[0]
+                                    #on change la direction de p de manière à lui faire contourner l'obstacle
+                                    p[2]=direction[1]
+                                    nouvelle_coord= [p[3]+p[1],p[4]+p[2]]
+                                    if (nouvelle_coord[0]+taille_personnes ) >= (n-25) and ((nouvelle_coord[1]+taille_personnes) >= m//2+taille_sortie//2 or (nouvelle_coord[1])<= m//2-taille_sortie//2):                                        #si p rentre dans un mur
+                                        nouvelle_coord[0] = (n-25-taille_personnes)
+                                        #p se colle au mur
+                                        p[1]= nouvelle_coord[0]- p[3]
+                                        if p[4]<sortie[1]:
+                                            p[2]= 5
+                                            #p se déplace vers la sortie
+                                        else:
+                                            p[2] = -5
+                                        nouvelle_coord[1]=p[4]+p[2]
+                                    if (nouvelle_coord[1] + taille_personnes) >= (m-25):
+                                        nouvelle_coord[1] = (m-25-taille_personnes)
+                                        #p se colle en haut de la salle
+                                        p[2]= nouvelle_coord[1]- p[4]
+                                        p[1]=5
+                                        nouvelle_coord[0]=p[1] +p[3]
+                                    if (nouvelle_coord[1] - taille_personnes) <= 25:
+                                        nouvelle_coord[1] = (25+taille_personnes)
+                                        #p se colle en bas de la salle
+                                        p[2]= nouvelle_coord[1]- p[4]
+                                        p[1]=5
+                                        nouvelle_coord[0]=p[1] +p[3]
+                                        """
+                    
+                    (col,p,nouvelle_coord) = test_collisions(i, col, p, 5, nouvelle_coord)
+                    
+                    b=True
+                    for j in range (nombre_de_personnes):
+                        
+                        if i != j and Foule[j] != "sorti":
+                            b= b and not(collision(Foule[j][3:5],nouvelle_coord))
+                    
+                    b = b and not (collision_pilier(nouvelle_coord))
+                    
+                    if b :
+                        p[3:5]=nouvelle_coord
+                        monCanvas.move(p[0],round(p[1]),round(p[2]))
+                    
+                    else :
+                        """
+                        dx=((sortie[0]-p[3])/(sqrt(((sortie[0]-p[3])**2)+((sortie[1]-p[4])**2))))*2
+                         #vitesse en x
+                        
+                        if p[4]<=(porte[1]) :
+                             dy=(((porte[1]+sortie[1])/2-p[4])/(sqrt(((sortie[0]-p[3])**2)+((sortie[1]-p[4])**2))))*2
+                             #vitesse en y
+                        
+                        elif  p[4]>=(porte[3]):
+                             dy=(((porte[3]+sortie[1])/2-p[4])/(sqrt(((sortie[0]-p[3])**2)+((sortie[1]-p[4])**2))))*2
+                        
+                        else:
+                            centre_p = centre(p[3:5])
+                            if abs(centre_p[1] - sortie[1]) <= RAYON_PILIER + taille_personnes/2 \
+                                and centre_p[0] < centre_pilier[0]:
+                                # trajectoire qui croise le pilier --> on vise donc une cible_pilier
+                                if centre_p[1] <= sortie[1]:
+                                    [dx, dy] = vecteur_direction(p[3:5], cible_haut_pilier, 2)
+                                else:
+                                    [dx, dy] = vecteur_direction(p[3:5], cible_bas_pilier, 2)
+                            else:
+                                dy=0
+                                dx=2
+                            #la norme du vecteur vitesse est de 2
+                        """
+                        
+                        [dx,dy] = ciblage(p, 2)
+                        
+                        p[1]=dx
+                        p[2]=dy
+                        #vitesse en pixel(unité)
+                        
+                        nouvelle_coord= [p[3]+dx,p[4]+dy]
+                    #coordonées futur de p si il n'y a pas de collision
+                    
+                    """
+                    if (nouvelle_coord[0]+taille_personnes ) >= (n-25) and ((nouvelle_coord[1]+taille_personnes) >= m//2+taille_sortie//2 or (nouvelle_coord[1])<= m//2-taille_sortie//2):
+                        nouvelle_coord[0] = (n-25-taille_personnes)
+                        #p se colle au mur
+                        p[1]= nouvelle_coord[0]- p[3]
+                        if p[4]<sortie[1] :
+                            p[2]= 2
+                            #p se déplace vers la sortie
+                        else:
+                            p[2] = -2
+                        nouvelle_coord[1]=p[4]+p[2]
+                        #on rentre les coordonées modifiées de p
+                    """
+                    
+                    nouvelle_coord = collision_murs(p, nouvelle_coord, 2)
+                    col=0
+                    #nombre de collisions
+                    """
+                    for j in range (len(Foule)):
+                    #on parcourt la Foule pour tester les collisions
+                    
+                        if i != j and Foule[j] != "sorti":
+                            if (collision(Foule[j][3:5],nouvelle_coord)):
+                                col = col +1
+                                if col==1:
+                                    direction=deplacement_orthogonal(p[3:5],Foule[j][3:5],2)
+                                    p[1]=direction[0]
+                                    #on change la direction de p de manière à lui faire contourner l'obstacle
+                                    p[2]=direction[1]
+                                    nouvelle_coord= [p[3]+p[1],p[4]+p[2]]
+                                    if (nouvelle_coord[0]+taille_personnes ) >= (n-25) and ((nouvelle_coord[1]+taille_personnes) >= m//2+taille_sortie//2 or (nouvelle_coord[1])<= m//2-taille_sortie//2): #si p rentre dans un mur
+                                        nouvelle_coord[0] = (n-25-taille_personnes)
+                                        #p se colle au mur
+                                        p[1]= nouvelle_coord[0]- p[3]
+                                        if p[4]<sortie[1]:
+                                            p[2]= 2
+                                            #p se déplace vers la sortie
+                                        else:
+                                            p[2] = -2
+                                        nouvelle_coord[1]=p[4]+p[2]
+                                    if (nouvelle_coord[1] + taille_personnes) >= (m-25):
+                                        nouvelle_coord[1] = (m-25-taille_personnes)
+                                        #p se colle en haut de la salle
+                                        p[2]= nouvelle_coord[1]- p[4]
+                                        p[1]=2
+                                        nouvelle_coord[0]=p[1] +p[3]
+                                    if (nouvelle_coord[1] - taille_personnes) <= 25:
+                                        nouvelle_coord[1] = (25+taille_personnes)
+                                        #p se colle en bas de la salle
+                                        p[2]= nouvelle_coord[1]- p[4]
+                                        p[1]=2
+                                        nouvelle_coord[0]=p[1] +p[3]
+                        """
+                    (col,p,nouvelle_coord) = test_collisions(i, col, p, 2, nouvelle_coord)
+                    
+                    b=True
+                    for j in range (nombre_de_personnes):
+                        
+                        if i != j and Foule[j] != "sorti":
+                            b= b and not(collision(Foule[j][3:5],nouvelle_coord))
+                    b = b and not (collision_pilier(nouvelle_coord))
+                    
+                    if b :
+                        p[3:5]=nouvelle_coord
+                        monCanvas.move(p[0],int(p[3])-monCanvas.coords(p[0])[0],int(p[4])-monCanvas.coords(p[0])[1])
+                        
+                else :
+                    monCanvas.itemconfig(p[0], state=HIDDEN)
+                    Foule[i] = "sorti"
+                
+            if Foule == Foule_precedente:
+                temps = nan
+                quit()
+            if temps > 100000:
+                temps = nan
+                quit()
+            Foule_precedente = deepcopy(Foule)
+            
+            temps += 1
+            run_actif = 0
+            a=(len(Foule))*["sorti"]
+            if listes_egales(a, Foule):
+                quit()
+            fen_princ.after(100,run)
+            
+     
+        
+    zone2 = Frame(fen_princ, bg='#777777')
+    
+    zone2.grid(row=0,column=1,ipadx=5)
+
+    bouVert = Button(zone2, text="RUN", fg="white", bg="green", command = run)
+
+    bouRouge = Button(zone2, text="QUIT", fg="white", bg="red", command = quit)
+
+    bouVert.pack(side=LEFT, fill=Y, ipady=30, padx=10,pady=10)
+
+    bouRouge.pack(side=LEFT, fill=Y, ipady=30, padx=10,pady=10)
+    
+    fen_princ.mainloop()
+    
+    return temps * delta_t
+
+
+    
+fenetre(1000,600,100,30,100) 
\ No newline at end of file