diff --git a/projet_rush_hour/README.md b/projet_rush_hour/README.md
index a5b29042583cb37473d868cbc7ba9fd8e3ecca5b..f84b16db309dbabd5988cf1c1f51e2aba92f910a 100644
--- a/projet_rush_hour/README.md
+++ b/projet_rush_hour/README.md
@@ -1,4 +1,9 @@
 
+
+
+mi13
+gantchou koffi
+
 SEMAINE1
 pour commencer
 j'ai ecris quelques lignes de code notamment en deffinissant 2 classes; la classe Cell() qui va 
@@ -15,4 +20,9 @@ Dans le module jeu je vois l'etat du jeu en affichant le plateau contenant des v
 SEMAINE5
 j'ai continué dans la classe Plateau qui a pour but de montrer l'evolution du plateau de jeu 
 tout en definissant une fonction qui verifie si une position est valide  
+j'ai defini une fonction qui permet de depacer un vehicule dans le module jeu ou ily'a aussi la resolution du case tête grace a une file
+j'ai defini un module niveaux ou il y'a une configuration des niveaux qu'il faut resoudre 
+et dans le module configurations on a pour chaque niveau les mouvements qu'il faut pour les resoudre 
+j'ai egalement commencé a definir une interface graphique dans le module graphicalboard
+
 
diff --git a/projet_rush_hour/apqueue.py b/projet_rush_hour/apqueue.py
new file mode 100644
index 0000000000000000000000000000000000000000..a0ec7a77eead020c617ac595672eed29b190a554
--- /dev/null
+++ b/projet_rush_hour/apqueue.py
@@ -0,0 +1,138 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+
+
+"""
+:mod:`apqueue` module
+
+:author: `FIL - Faculté des Sciences et Technologies -
+          Univ. Lille <http://portail.fil.univ-lille1.fr>`_
+
+:date: 2015, september
+:last revision: 2024, March
+
+A module for queue data structure.
+
+:Provides:
+
+* class ApQueue
+
+and methods
+
+* `enqueue`
+* `dequeue`
+* `is_empty`
+"""
+from typing import TypeVar
+T = TypeVar('T')
+
+class ApQueueEmptyError(Exception):
+    """
+    Exception for empty stacks
+    """
+    def __init__(self, msg):
+        self.message = msg
+
+
+class ApQueue():
+    """
+    $$$ ap_queue = ApQueue()
+    $$$ ap_queue.is_empty()
+    True
+    $$$ ap_queue.enqueue(1)
+    $$$ ap_queue.is_empty()
+    False
+    $$$ ap_queue.enqueue(2)
+    $$$ str(ap_queue)
+    '→2|1→'
+    $$$ ap_queue.dequeue()
+    1
+    $$$ ap_queue.dequeue()
+    2
+    $$$ ap_queue.is_empty()
+    True
+    $$e ap_queue.dequeue()
+    ApQueueEmptyError
+    """
+    ARROW = chr(0x2192)
+
+    def __init__(self):
+        """
+
+        build  a new empty queue
+        precondition: none
+        """
+        self.__content = []
+
+    def contains(self, elt : T) -> bool:
+        """ à_remplacer_par_ce_que_fait_la_fonction
+
+        Précondition :
+        Exemple(s) :
+        $$$
+        """
+        return elt in self.__content
+    
+    def enqueue(self, elt: T):
+        """
+        insert an element at the begining of the queue
+        precondition: none
+        """
+        self.__content.insert(0, elt)
+
+    def dequeue(self) -> T:
+        """
+        return the element on top of self
+        Side effect: self contains an element less
+        precondition: self must be non empty
+        """
+        if len(self.__content) > 0:
+            res = self.__content.pop()
+        else:
+            raise ApQueueEmptyError('empty queue, nothing to dequeue')
+        return res
+
+    def is_empty(self) -> bool:
+        """
+        return:
+          * ``True`` if s is empty
+          * ``False`` otherwise
+        precondition: none
+        """
+        return self.__content == []
+
+    def __str__(self) -> str:
+        """
+        return the string representation of this queue.
+        """
+        return ApQueue.ARROW + \
+            "|".join(str(el) for el in self.__content) + \
+            ApQueue.ARROW
+
+    def __len__(self) -> int:
+        """
+        return the length of this queue
+        """
+        return len(self.__content)
+
+if __name__ == '__main__':
+    import apl1test
+    apl1test.testmod('apqueue.py')
+    
+# import unittest    
+# class TestMathFunctions(unittest.TestCase):
+#     """ à_remplacer_par_ce_que_fait_la_classe
+# 
+#     Exemple(s) :
+#     $$$ 
+#     """
+#     def test___str__(self):
+#         """ à_remplacer_par_ce_que_fait_la_fonction
+# 
+#         Précondition :
+#         Exemple(s) :
+#         $$$
+#         """
+#         self.assertEqual(__str__(self),)
+#     
+
diff --git a/projet_rush_hour/cellule.py b/projet_rush_hour/cellule.py
index 687a9717c58404611b72bc56adddb0bf056c11ff..c00b962faae87276b1432123019b11763a3287bf 100644
--- a/projet_rush_hour/cellule.py
+++ b/projet_rush_hour/cellule.py
@@ -18,10 +18,16 @@ class Cell():
         self.x = x
         self.y = y
         self.couleur = couleur # permettra de savoir si une cellule est vide ou pas
-        self.vehicule = None
         
     
-    
+    def __eq__(self,other)->bool:
+        """ à_remplacer_par_ce_que_fait_la_fonction
+
+        Précondition :
+        Exemple(s) :
+        $$$
+        """
+        return self.x == other.x and self.y == other.y and self.couleur == other.couleur
       
      
         
diff --git a/projet_rush_hour/config.py b/projet_rush_hour/config.py
new file mode 100644
index 0000000000000000000000000000000000000000..a4e0fa1ee925dd8c54f48c329048b7323130d9ac
--- /dev/null
+++ b/projet_rush_hour/config.py
@@ -0,0 +1,53 @@
+
+from vehicule import Vehicule
+# cette classe est tres importante quand on va generer la resolution du casse tête
+class Config():
+    """ la classe Config sert a presnter un vehicule et le mouvement qu'il fera
+
+    Exemple(s) :
+    $$$ co = Config(Vehicule(0,2,2,'vertical','A'),'haut')
+    $$$ co.vehicule
+    Vehicule(0,2,2,'vertical','A')
+    $$$ co.direction
+    'haut'
+    $$$ co
+    Config(Vehicule(0,2,2,'vertical','A'),'haut')
+    $$$ confi = Config('A','bas')
+    $$$ confi == co
+    False
+    $$$ co2 = Config(Vehicule(0,2,2,'vertical','A'),'haut')
+    $$$ co == co2
+    True
+    """
+    def __init__(self,vehicule,direction):
+        """ à_remplacer_par_ce_que_fait_la_fonction
+
+        Précondition :
+        Exemple(s) :
+        $$$
+        """
+        self.vehicule = vehicule
+        self.direction = direction
+        
+        
+    def __eq__(self,other)->bool:
+        """ à_remplacer_par_ce_que_fait_la_fonction
+
+        Précondition :
+        Exemple(s) :
+        $$$
+        """
+        if not isinstance(other,Config):
+            return False
+        return (self.vehicule == other.vehicule and self.direction == other.direction)
+    
+    
+    def __repr__(self)->str:
+        """ à_remplacer_par_ce_que_fait_la_fonction
+
+        Précondition :
+        Exemple(s) :
+        $$$
+        """
+        return f'Config({self.vehicule},{self.direction})'
+        
\ No newline at end of file
diff --git a/projet_rush_hour/configurations.py b/projet_rush_hour/configurations.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..da8b1746d756e6865eea08e2441edc5605a43b77 100644
--- a/projet_rush_hour/configurations.py
+++ b/projet_rush_hour/configurations.py
@@ -0,0 +1,298 @@
+from plateau import Plateau
+from config import Config
+def niveau1()->list[Config]:
+    """ resolution du casse tete de niveau1
+
+    Précondition :
+    Exemple(s) :
+    $$$
+    """
+    liste1 = [Config(Vehicule(5,2,3,horizontal,R),gauche),
+              Config(Vehicule(4,4,2,horizontal,C),gauche),
+              Config(Vehicule(4,3,2,horizontal,C),gauche),
+              Config(Vehicule(4,2,2,horizontal,C),gauche),
+              Config(Vehicule(1,3,3,vertical,Q),bas),
+              Config(Vehicule(1,5,3,vertical,O),bas),
+              Config(Vehicule(2,5,3,vertical,O),bas),
+              Config(Vehicule(0,0,2,horizontal,A),droite),
+              Config(Vehicule(1,0,3,vertical,P),haut),
+              Config(Vehicule(4,0,2,vertical,B),haut),
+              Config(Vehicule(5,1,3,horizontal,R),gauche)]
+    return liste1
+        
+def niveau2()->list[Config]:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$
+    """
+    liste2 = [Config(Vehicule(4,4,2,horizontal,E),gauche),
+              Config(Vehicule(2,0,2,horizontal,Z),droite),
+              Config(Vehicule(0,3,3,horizontal,O),gauche),
+              Config(Vehicule(0,2,3,horizontal,O),gauche),
+              Config(Vehicule(1,5,3,vertical,P),bas),
+              Config(Vehicule(2,5,3,vertical,P),bas),
+              Config(Vehicule(2,4,2,vertical,C),haut),
+              Config(Vehicule(1,4,2,vertical,C),haut),
+              Config(Vehicule(0,0,2,vertical,A),bas),
+              Config(Vehicule(0,1,3,horizontal,O),gauche)
+              ]
+    return liste2
+        
+def niveau38()->list:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$
+    """
+    liste38 = [Config(Vehicule(0,3,3,horizontal,O),gauche),
+               Config(Vehicule(2,5,3,vertical,R),haut),
+               Config(Vehicule(1,5,3,vertical,R),haut),
+               Config(Vehicule(3,3,2,horizontal,E),droite),
+               Config(Vehicule(4,3,2,horizontal,G),droite),
+               Config(Vehicule(1,3,2,vertical,C),bas),
+               Config(Vehicule(2,3,2,vertical,C),bas),
+               Config(Vehicule(1,1,2,horizontal,B),droite),
+               Config(Vehicule(1,2,2,horizontal,B),droite),
+               Config(Vehicule(2,2,2,vertical,D),haut),
+               Config(Vehicule(4,2,2,vertical,F),haut),
+               Config(Vehicule(5,3,3,horizontal,Q),gauche),
+               Config(Vehicule(5,2,3,horizontal,Q),gauche),
+               Config(Vehicule(5,1,3,horizontal,Q),gauche),
+               Config(Vehicule(3,3,2,vertical,C),bas),
+               Config(Vehicule(3,4,2,horizontal,E),gauche),
+               Config(Vehicule(0,5,3,vertical,R),bas),
+               Config(Vehicule(0,2,3,horizontal,O),droite),
+               Config(Vehicule(1,2,2,vertical,D),haut),
+               Config(Vehicule(2,0,2,horizontal,Z),droite),
+               Config(Vehicule(0,0,2,vertical,A),bas),
+               Config(Vehicule(1,0,2,vertical,A),bas),
+               Config(Vehicule(2,0,2,vertical,A),bas),
+               Config(Vehicule(2,1,2,horizontal,Z),gauche),
+               Config(Vehicule(0,2,2,vertical,D),bas),
+               Config(Vehicule(0,3,3,horizontal,O),gauche),
+               Config(Vehicule(1,5,3,vertical,R),haut),
+               Config(Vehicule(3,3,2,horizontal,E),droite),
+               Config(Vehicule(4,3,2,vertical,C),haut),
+               Config(Vehicule(3,3,2,vertical,C),haut),
+               Config(Vehicule(5,0,3,horizontal,Q),droite),
+               Config(Vehicule(5,1,3,horizontal,Q),droite),
+               Config(Vehicule(5,2,3,horizontal,Q),droite),
+               Config(Vehicule(3,0,2,vertical,A),bas),
+               Config(Vehicule(3,2,2,vertical,F),bas),
+               Config(Vehicule(1,2,2,vertical,D),bas),
+               Config(Vehicule(1,3,2,horizontal,B),gauche),
+               Config(Vehicule(1,2,2,horizontal,B),gauche),
+               Config(Vehicule(1,1,2,horizontal,B),gauche),
+               Config(Vehicule(2,2,2,vertical,D),haut),
+               Config(Vehicule(2,3,2,vertical,C),haut),
+               Config(Vehicule(3,4,2,horizontal,E),gauche),
+               Config(Vehicule(3,3,2,horizontal,E),gauche),
+               Config(Vehicule(3,2,2,horizontal,E),gauche),
+               Config(Vehicule(3,1,2,horizontal,E),gauche),
+               Config(Vehicule(1,3,2,vertical,C),bas),
+               Config(Vehicule(1,2,2,vertical,D),bas),
+               Config(Vehicule(1,0,2,horizontal,B),droite),
+               Config(Vehicule(1,1,2,horizontal,B),droite),
+               Config(Vehicule(1,2,2,horizontal,B),droite),
+               Config(Vehicule(2,2,2,vertical,D),haut),
+               Config(Vehicule(3,0,2,horizontal,E),droite),
+               Config(Vehicule(4,0,2,vertical,A),haut),
+               Config(Vehicule(0,5,3,vertical,R),bas),
+               Config(Vehicule(0,2,3,horizontal,O),droite),
+               Config(Vehicule(1,2,2,vertical,D),haut),
+               Config(Vehicule(2,0,2,horizontal,Z),droite),
+               Config(Vehicule(3,0,2,vertical,A),haut),
+               Config(Vehicule(2,0,2,vertical,A),haut),
+               Config(Vehicule(1,0,2,vertical,A),haut),
+               Config(Vehicule(2,1,2,horizontal,Z),gauche),
+               Config(Vehicule(3,1,2,horizontal,E),gauche),
+               Config(Vehicule(4,2,2,vertical,F),haut),
+               Config(Vehicule(3,2,2,vertical,F),haut),
+               Config(Vehicule(5,3,3,horizontal,Q),gauche),
+               Config(Vehicule(4,4,2,horizontal,G),gauche),
+               Config(Vehicule(4,3,2,horizontal,G),gauche),
+               Config(Vehicule(4,2,2,horizontal,G),gauche),
+               Config(Vehicule(4,1,2,horizontal,G),gauche),
+               Config(Vehicule(2,2,2,vertical,F),bas),
+               Config(Vehicule(1,5,3,vertical,R),bas),
+               Config(Vehicule(2,5,3,vertical,R),bas)]
+    return liste38
+
+
+
+def niveau39()->list:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$
+    """
+    liste39 = [Config(Vehicule(4,2,2,horizontal,H),droite),
+               Config(Vehicule(5,2,2,horizontal,I),droite),
+               Config(Vehicule(5,3,2,horizontal,I),droite),
+               Config(Vehicule(2,5,3,vertical,R),haut),
+               Config(Vehicule(4,3,2,horizontal,H),droite),
+               Config(Vehicule(2,2,2,vertical,C),bas),
+               Config(Vehicule(3,2,2,vertical,C),bas),
+               Config(Vehicule(3,0,2,horizontal,D),droite),
+               Config(Vehicule(4,0,2,vertical,F),haut),
+               Config(Vehicule(0,2,2,vertical,A),bas),
+               Config(Vehicule(0,3,3,horizontal,O),gauche),
+               Config(Vehicule(1,5,3,vertical,R),haut),
+               Config(Vehicule(3,3,2,horizontal,E),droite),
+               Config(Vehicule(1,3,2,vertical,B),bas),
+               Config(Vehicule(2,3,2,vertical,B),bas),
+               Config(Vehicule(3,3,2,vertical,B),bas),
+               Config(Vehicule(3,4,2,horizontal,E),gauche),
+               Config(Vehicule(0,5,3,vertical,R),bas),
+               Config(Vehicule(0,2,3,horizontal,O),droite),
+               Config(Vehicule(1,2,2,vertical,A),haut),
+               Config(Vehicule(2,0,2,horizontal,Z),droite),
+               Config(Vehicule(2,1,2,horizontal,Z),droite),
+               Config(Vehicule(2,2,2,horizontal,Z),droite),
+               Config(Vehicule(0,2,2,vertical,A),bas),
+               Config(Vehicule(0,3,3,horizontal,O),gauche),
+               Config(Vehicule(1,5,3,vertical,R),haut),
+               Config(Vehicule(3,3,2,horizontal,E),droite),
+               Config(Vehicule(3,0,2,vertical,F),haut),
+               Config(Vehicule(2,0,2,vertical,F),haut),
+               Config(Vehicule(1,0,2,vertical,F),haut),
+               Config(Vehicule(3,1,2,horizontal,D),droite),
+               Config(Vehicule(4,1,2,vertical,G),haut),
+               Config(Vehicule(3,1,2,vertical,G),haut),
+               Config(Vehicule(2,1,2,vertical,G),haut),
+               Config(Vehicule(1,1,2,vertical,G),haut),
+               Config(Vehicule(3,2,2,horizontal,D),gauche),
+               Config(Vehicule(3,1,2,horizontal,D),gauche),
+               Config(Vehicule(3,4,2,horizontal,E),gauche),
+               Config(Vehicule(0,5,3,vertical,R),bas),
+               Config(Vehicule(0,2,3,horizontal,O),droite),
+               Config(Vehicule(1,2,2,vertical,A),haut),
+               Config(Vehicule(2,3,2,horizontal,Z),gauche),
+               Config(Vehicule(2,2,2,horizontal,Z),gauche),
+               Config(Vehicule(2,1,2,horizontal,Z),gauche),
+               Config(Vehicule(0,2,2,vertical,A),bas),
+               Config(Vehicule(0,3,3,horizontal,O),gauche),
+               Config(Vehicule(1,5,3,vertical,R),haut),
+               Config(Vehicule(3,3,2,horizontal,E),droite),
+               Config(Vehicule(4,3,2,vertical,B),haut),
+               Config(Vehicule(3,3,2,vertical,B),haut),
+               Config(Vehicule(2,3,2,vertical,B),haut),
+               Config(Vehicule(3,4,2,horizontal,E),gauche),
+               Config(Vehicule(0,5,3,vertical,R),bas),
+               Config(Vehicule(0,2,3,horizontal,O),droite),
+               Config(Vehicule(1,2,2,vertical,A),haut),
+               Config(Vehicule(4,2,2,vertical,C),haut),
+               Config(Vehicule(3,2,2,vertical,C),haut),
+               Config(Vehicule(4,4,2,horizontal,H),gauche),
+               Config(Vehicule(4,3,2,horizontal,H),gauche),
+               Config(Vehicule(4,2,2,horizontal,H),gauche),
+               Config(Vehicule(4,1,2,horizontal,H),gauche),
+               Config(Vehicule(2,2,2,vertical,C),bas),
+               Config(Vehicule(0,2,2,vertical,A),bas),
+               Config(Vehicule(0,3,3,horizontal,O),gauche),
+               Config(Vehicule(1,5,3,vertical,R),haut),
+               Config(Vehicule(3,3,2,horizontal,E),droite),
+               Config(Vehicule(1,3,2,vertical,B),bas),
+               Config(Vehicule(2,3,2,vertical,B),bas),
+               Config(Vehicule(5,4,2,horizontal,I),gauche),
+               Config(Vehicule(5,3,2,horizontal,I),gauche),
+               Config(Vehicule(5,2,2,horizontal,I),gauche),
+               Config(Vehicule(3,3,2,vertical,B),bas),
+               Config(Vehicule(3,4,2,horizontal,E),gauche),
+               Config(Vehicule(0,5,3,vertical,R),bas),
+               Config(Vehicule(1,5,3,vertical,R),bas),
+               Config(Vehicule(2,5,3,vertical,R),bas),
+               Config(Vehicule(0,2,3,horizontal,O),droite)]
+    return liste39
+
+
+
+def niveau40()->list:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$
+    """
+    liste40 = [Config(Vehicule(5,3,2,horizontal,I),droite),
+               Config(Vehicule(3,3,2,vertical,E),bas),
+               Config(Vehicule(3,0,3,horizontal,Q),droite),
+               Config(Vehicule(3,1,3,horizontal,Q),droite),
+               Config(Vehicule(1,5,3,vertical,P),haut),
+               Config(Vehicule(3,2,3,horizontal,Q),droite),
+               Config(Vehicule(4,2,2,vertical,F),haut),
+               Config(Vehicule(5,0,2,horizontal,H),droite),
+               Config(Vehicule(1,1,2,vertical,C),bas),
+               Config(Vehicule(2,1,2,vertical,C),bas),
+               Config(Vehicule(0,0,3,vertical,O),bas),
+               Config(Vehicule(1,0,3,vertical,O),bas),
+               Config(Vehicule(2,0,3,vertical,O),bas),
+               Config(Vehicule(0,1,2,horizontal,A),gauche),
+               Config(Vehicule(1,2,2,vertical,D),haut),
+               Config(Vehicule(2,3,2,horizontal,Z),gauche),
+               Config(Vehicule(2,2,2,horizontal,Z),gauche),
+               Config(Vehicule(2,1,2,horizontal,Z),gauche),
+               Config(Vehicule(0,2,2,vertical,D),bas),
+               Config(Vehicule(0,0,2,horizontal,A),droite),
+               Config(Vehicule(0,1,2,horizontal,A),droite),
+               Config(Vehicule(0,4,2,vertical,B),bas),
+               Config(Vehicule(0,2,2,horizontal,A),droite),
+               Config(Vehicule(1,2,2,vertical,D),haut),
+               Config(Vehicule(2,0,2,horizontal,Z),droite),
+               Config(Vehicule(2,1,2,horizontal,Z),droite),
+               Config(Vehicule(3,0,3,vertical,O),haut),
+               Config(Vehicule(2,0,3,vertical,O),haut),
+               Config(Vehicule(1,0,3,vertical,O),haut),
+               Config(Vehicule(3,1,2,vertical,C),haut),
+               Config(Vehicule(2,1,2,vertical,C),haut),
+               Config(Vehicule(1,1,2,vertical,C),haut),
+               Config(Vehicule(2,2,2,horizontal,Z),gauche),
+               Config(Vehicule(5,1,2,horizontal,H),gauche),
+               Config(Vehicule(3,2,2,vertical,F),bas),
+               Config(Vehicule(3,3,3,horizontal,Q),gauche),
+               Config(Vehicule(3,2,3,horizontal,Q),gauche),
+               Config(Vehicule(3,1,3,horizontal,Q),gauche),
+               Config(Vehicule(0,5,3,vertical,P),bas),
+               Config(Vehicule(0,3,2,horizontal,A),droite),
+               Config(Vehicule(4,3,2,vertical,E),haut),
+               Config(Vehicule(3,3,2,vertical,E),haut),
+               Config(Vehicule(2,3,2,vertical,E),haut),
+               Config(Vehicule(1,3,2,vertical,E),haut),
+               Config(Vehicule(3,0,3,horizontal,Q),droite),
+               Config(Vehicule(3,1,3,horizontal,Q),droite),
+               Config(Vehicule(2,1,2,horizontal,Z),droite),
+               Config(Vehicule(0,1,2,vertical,C),bas),
+               Config(Vehicule(1,1,2,vertical,C),bas),
+               Config(Vehicule(2,1,2,vertical,C),bas),
+               Config(Vehicule(2,2,2,horizontal,Z),gauche),
+               Config(Vehicule(0,3,2,vertical,E),bas),
+               Config(Vehicule(0,4,2,horizontal,A),gauche),
+               Config(Vehicule(1,5,3,vertical,P),haut),
+               Config(Vehicule(3,2,3,horizontal,Q),droite),
+               Config(Vehicule(4,2,2,vertical,F),haut),
+               Config(Vehicule(5,0,2,horizontal,H),droite),
+               Config(Vehicule(0,0,3,vertical,O),bas),
+               Config(Vehicule(1,0,3,vertical,O),bas),
+               Config(Vehicule(2,0,3,vertical,O),bas),
+               Config(Vehicule(2,1,2,horizontal,Z),gauche),
+               Config(Vehicule(0,2,2,vertical,D),bas),
+               Config(Vehicule(0,3,2,horizontal,A),gauche),
+               Config(Vehicule(0,2,2,horizontal,A),gauche),
+               Config(Vehicule(0,1,2,horizontal,A),gauche),
+               Config(Vehicule(1,2,2,vertical,D),haut),
+               Config(Vehicule(2,0,2,horizontal,Z),droite),
+               Config(Vehicule(3,0,3,vertical,O),haut),
+               Config(Vehicule(5,1,2,horizontal,H),gauche),
+               Config(Vehicule(3,2,2,vertical,F),bas),
+               Config(Vehicule(3,3,3,horizontal,Q),gauche),
+               Config(Vehicule(0,5,3,vertical,P),bas),
+               Config(Vehicule(1,3,2,vertical,E),haut),
+               Config(Vehicule(1,4,2,vertical,B),haut),
+               Config(Vehicule(5,4,2,horizontal,I),gauche),
+               Config(Vehicule(4,4,2,horizontal,G),gauche),
+               Config(Vehicule(1,5,3,vertical,P),bas)]
+    return liste40
diff --git a/projet_rush_hour/graphicalboard.py b/projet_rush_hour/graphicalboard.py
new file mode 100644
index 0000000000000000000000000000000000000000..40485b1939fc0fbd0a675dc44449787b8ac7c58f
--- /dev/null
+++ b/projet_rush_hour/graphicalboard.py
@@ -0,0 +1,21 @@
+
+from vehicule import Vehicule
+from tkinter import *
+fenetre = Tk()
+fenetre.geometry('500x500')
+fenetre.title('rush hour plateau')
+fenetre['bg'] = 'white'
+fenetre.resizable(height= False,width = False)
+
+label = Label(fenetre, text = '')
+label.pack()
+
+
+
+
+
+
+
+
+
+fenetre.mainloop()
\ No newline at end of file
diff --git a/projet_rush_hour/grille.py b/projet_rush_hour/grille.py
deleted file mode 100644
index 075d217af1fffb4a27b209c97c1474621a67415c..0000000000000000000000000000000000000000
--- a/projet_rush_hour/grille.py
+++ /dev/null
@@ -1,16 +0,0 @@
-
-from cellule import Cell
-class Grille():
-    """ à_remplacer_par_ce_que_fait_la_classe
-
-    Exemple(s) :
-    $$$ 
-    """
-    def init(self,grille):
-        """ à_remplacer_par_ce_que_fait_la_fonction
-
-        Précondition :
-        Exemple(s) :
-        $$$
-        """
-        self.grille = [[Cell() for _ in range(6)] for _ in range(6)]
\ No newline at end of file
diff --git a/projet_rush_hour/jeu.py b/projet_rush_hour/jeu.py
index 0c553909d09549175ee9ec1ad3c3ffb7c210f4eb..dbfb1a6fa65b7de4f12138eb51f8d0bdc0a9179b 100644
--- a/projet_rush_hour/jeu.py
+++ b/projet_rush_hour/jeu.py
@@ -1,32 +1,74 @@
+
+#mi13
+# gantchou koffi
 from cellule import Cell
 from vehicule import Vehicule 
 from plateau import Plateau
-def main():
-    vehicules = []
-    A = Vehicule(0,0,2,'horizontal','A')
-    Z = Vehicule(2,1,2,'horizontal','Z')
-    C = Vehicule(4,3,2,'horizontal','C')
-    R = Vehicule(5,2,3,'horizontal','R')
-    B = Vehicule(2,3,2,'vertical','B')
-    
-    vehicules = [A,Z,C,R,B]
-    
-    plateau = Plateau(vehicules)
-    plateau.affiche_grille()
-    
-    while not(plateau.est_fini()):
-        couleur = input('choisie vehicule a deplacer : ')
-        mouvement =  input ('choisie le mouvement : gauche, droite, haut , bas : ')
-        de_combien = int(input('vous voulez deplacer de combat : '))
-        vehicule = plateau.recherhe_voiture(couleur)
-        if plateau.est_valide(vehicule, mouvement,de_combien):
-            plateau.deplacer(vehicule,mouvement,de_combien)
-           
-        else:
-            print('deplacement invalide')
-        plateau.affiche_grille()
+from config import Config
+import niveaux
+from apqueue import ApQueue       
+from copy import deepcopy
+  
+def deplacer(plateau,vehicule:Vehicule,mouvement)->Plateau:
+        """ deplacement de l'objet voiture
+
+        Précondition :
+        Exemple(s) :
+        $$$ v1 = Vehicule(2,0,2,'horizontal','Z')
+        $$$ v2 = Vehicule(4,3,2,'horizontal','A')
+        $$$ v3 = Vehicule(0,4,2,'vertical','I')
+        $$$ plateau = Plateau([v1,v2,v3])
+        $$$ v1_deplacer = Vehicule(2,1,2,'horizontal','Z')
+        $$$ deplacer(plateau,v1,'droite')
+        Plateau([v1_deplacer,v2,v3])
+        """
+        vehicule_a_deplacer =  deepcopy(vehicule)   
+        if vehicule_a_deplacer.orientation == 'horizontal':
+            if mouvement == 'gauche':
+                vehicule_a_deplacer.y_deb -= 1
+            elif mouvement == 'droite':
+                vehicule_a_deplacer.y_deb +=  1
+        elif vehicule_a_deplacer.orientation == 'vertical':
+            if mouvement == 'bas':
+                vehicule_a_deplacer.x_deb +=1
+            elif mouvement == 'haut':
+                vehicule_a_deplacer.x_deb -= 1
+        vehicules = deepcopy(plateau.vehicules)
+        vehicules.remove(vehicule)
+        vehicules.append(vehicule_a_deplacer)
         
+        return Plateau(vehicules)         
         
+    
+
+def main():
+    vehicules = niveaux.niveau40()# choix du niveau à resoudre qui constitue une liste de vehicules
+    plateau = Plateau(vehicules)
+    queue_plateau = ApQueue() # on initialise une file 
+    queue_plateau.enqueue((plateau,[])) # on ajoute premierement a cette queue le plateau de jeu et une liste de mouvement vide car au depart il n'y a eu aucun mouvement
+    # j'ai mis plateau dans queue parce que si queue plateau ne contenais rien on ne pourra jamais rentrer dans la 1ere boucle while
+    # et cette condition qui sera toujours vrai va causer une boucle while
+    plateau_deja_vus = [plateau] # on initialise plateau_deja_vus a une liste contenant d'abord  plateau car la configuration initiale cad plateau pourrait 
+    cpt = 0
+    while not(queue_plateau.is_empty()):
+        plateau_a_deplacer,mouvement_liste = queue_plateau.dequeue() # on cree le plateau a deplacer et la liste des mouvement
+        mouvements = plateau_a_deplacer.mouvements_possibles()
+        while len(mouvements) != 0:           
+            m = mouvements.pop()
+            
+            cpt+=1
+            print(cpt)
+            
+            plateau_nouveau = deplacer(plateau_a_deplacer,m.vehicule,m.direction)
+            #plateau_nouveau.affiche_grille()
+            if plateau_nouveau.est_fini():
+                print("vous avez gagné",mouvement_liste)
+                return 
+            if plateau_nouveau not in plateau_deja_vus:
+                plateau_deja_vus.append(plateau_nouveau)
+                queue_plateau.enqueue((plateau_nouveau, mouvement_liste + [m]))
+                    
+
 if __name__ == "__main__":
     main()
 
diff --git a/projet_rush_hour/niveaux.py b/projet_rush_hour/niveaux.py
new file mode 100644
index 0000000000000000000000000000000000000000..54e723d81258f50dcf272a13a4dae8c42b7bf8f9
--- /dev/null
+++ b/projet_rush_hour/niveaux.py
@@ -0,0 +1,108 @@
+from vehicule import Vehicule
+
+def niveau1()->list[Vehicule]:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$
+    """
+    A = Vehicule(0,0,2,'horizontal','A')
+    Z = Vehicule(2,1,2,'horizontal','Z')
+    C = Vehicule(4,4,2,'horizontal','C')
+    R = Vehicule(5,2,3,'horizontal','R')
+    B = Vehicule(4,0,2,'vertical','B')
+    P = Vehicule(1,0,3,'vertical','P')
+    O = Vehicule(1,5,3,'vertical','O')
+    Q = Vehicule(1,3,3,'vertical','Q')
+    vehicules = [A,Z,C,R,B,P,O,Q]
+    return vehicules
+
+
+def niveau2()->list[Vehicule]:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$
+    """
+    A = Vehicule(0,0,2,'vertical','A')
+    C = Vehicule(2,4,2,'vertical','C')
+    B = Vehicule(1,3,2,'vertical','B')
+    P = Vehicule(1,5,3,'vertical','P')
+    D = Vehicule(4,2,2,'vertical','D')
+    Q = Vehicule(3,0,3,'horizontal','Q')
+    O = Vehicule(0,3,3,'horizontal','O')
+    Z = Vehicule(2,0,2,'horizontal','Z')
+    G = Vehicule(5,3,2,'horizontal','G')
+    E = Vehicule(4,4,2,'horizontal','E')
+    F = Vehicule(5,0,2,'horizontal','F')
+    return [A,C,B,P,D,Q,O,Z,G,E,F]
+
+
+def niveau38()->list[Vehicule]:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$
+    """
+    A = Vehicule(0,0,2,'vertical','A')
+    C = Vehicule(1,3,2,'vertical','C')
+    F = Vehicule(4,2,2,'vertical','F')
+    D = Vehicule(2,2,2,'vertical','D')
+    R = Vehicule(2,5,3,'vertical','R')
+    Z = Vehicule(2,0,2,'horizontal','Z')
+    B = Vehicule(1,1,2,'horizontal','B')
+    O = Vehicule(0,3,3,'horizontal','O')
+    G = Vehicule(4,3,2,'horizontal','G')
+    E = Vehicule(3,3,2,'horizontal','E')
+    Q = Vehicule(5,3,3,'horizontal','Q')
+    return [A,C,F,D,R,Z,B,O,G,E,Q]
+    
+def niveau39()->list[Vehicule]:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$
+    """
+    A = Vehicule(0,2,2,'vertical','A')
+    C = Vehicule(2,2,2,'vertical','C')
+    B = Vehicule(1,3,2,'vertical','B')
+    F = Vehicule(4,0,2,'vertical','F')
+    G = Vehicule(4,1,2,'vertical','G')
+    R = Vehicule(2,5,3,'vertical','R')
+    O = Vehicule(0,3,3,'horizontal','O')
+    Z = Vehicule(2,0,2,'horizontal','Z')
+    D = Vehicule(3,0,2,'horizontal','D')
+    I = Vehicule(5,2,2,'horizontal','I')
+    E = Vehicule(3,3,2,'horizontal','E')
+    H = Vehicule(4,2,2,'horizontal','H')
+    
+    return [A,B,C,F,G,R,O,Z,I,E,H,D]
+    
+    
+    
+def niveau40()->list[Vehicule]:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$
+    """
+    O = Vehicule(0,0,3,'vertical','O')
+    C = Vehicule(1,1,2,'vertical','C')
+    D = Vehicule(1,2,2,'vertical','D')
+    B = Vehicule(0,4,2,'vertical','B')
+    P = Vehicule(1,5,3,'vertical','P')
+    E = Vehicule(3,3,2,'vertical','E')
+    F = Vehicule(4,2,2,'vertical','F')
+    Q = Vehicule(3,0,3,'horizontal','Q')
+    I = Vehicule(5,3,2,'horizontal','I')
+    H = Vehicule(5,0,2,'horizontal','H')
+    Z = Vehicule(2,3,2,'horizontal','Z')
+    G = Vehicule(4,4,2,'horizontal','G')
+    A = Vehicule(0,1,2,'horizontal','A')
+    return [O,C,D,B,P,E,F,Q,I,H,Z,G,A]
+
diff --git a/projet_rush_hour/plateau.py b/projet_rush_hour/plateau.py
index 16f30f6e5f66c9b9aaf6c0bde9f855659c18c8e5..ddba4ea89c748ff034028fbc4ebdf8687040c814 100644
--- a/projet_rush_hour/plateau.py
+++ b/projet_rush_hour/plateau.py
@@ -1,13 +1,34 @@
 from cellule import Cell
 from vehicule import Vehicule
+from config import Config
+from apqueue import ApQueue
+
+
 class Plateau():
-    """ à_remplacer_par_ce_que_fait_la_classe
+    """ la classe occupe du plateau sa mise a jour apres des mouvements qui a pour attribut la liste de vehicule
 
     Exemple(s) :
-    $$$ 
+    $$$ A = Vehicule(0,0,2,'horizontal','A')
+    $$$ Z = Vehicule(2,1,2,'horizontal','Z')
+    $$$ C = Vehicule(4,3,2,'horizontal','C')
+    $$$ R = Vehicule(5,2,3,'horizontal','R')
+    $$$ B = Vehicule(2,3,2,'vertical','B') 
+    $$$ p = Plateau([A,Z,C,R,B])
+    $$$ p.vehicules
+    [A,Z,C,R,B]
+    $$$ p2 = Plateau([B,Z,R,C,A])
+    $$$ p == p2
+    True
+    $$$ E = Vehicule(2,0,2,'vertical','E') 
+    $$$ p3 = Plateau([B,Z,R,C,A,E])
+    $$$ p == p3
+    False
+    $$$ p4 = Plateau([B,Z,R,C])
+    $$$ p4 == p
+    False
     """
     def __init__(self,vehicules:list[Vehicule]):
-        """ à_remplacer_par_ce_que_fait_la_fonction
+        """ construction de la grille de jeu 
 
         Précondition :
         Exemple(s) :
@@ -17,7 +38,18 @@ class Plateau():
         self.grille = [[Cell(x,y,'*') for x in range(6)] for y in range(6)]
         for vehicule in vehicules:
             for cell in vehicule.get_vehicule_cells():
+                if self.grille[cell.x][cell.y].couleur != '*':
+                    raise Exception('configuration invalide')
                 self.grille[cell.x][cell.y] = cell
+        
+    def __repr__(self)->str:
+        """ à_remplacer_par_ce_que_fait_la_fonction
+
+        Précondition :
+        Exemple(s) :
+        $$$
+        """
+        return f'Plateau({self.vehicules})'
             
     def affiche_grille(self):
         """ à_remplacer_par_ce_que_fait_la_fonction
@@ -32,7 +64,30 @@ class Plateau():
                 print(cell.couleur,end = ' ' )
             print('\n')
             
-    def est_valide(self,vehicule:Vehicule,mouvement,de_combien)->bool:
+    def mouvements_possibles(self)-> list[Config]:
+        """ genere les mouvements possible sur le plateau
+            
+        Précondition :
+        Exemple(s) :
+        $$$
+        """
+        liste = []
+        for  vehicule in  self.vehicules:
+            if vehicule.orientation == 'horizontal':
+                if self.est_valide(vehicule, 'gauche'):
+                    liste.append(Config(vehicule,'gauche'))
+                if self.est_valide(vehicule, 'droite'):
+                    liste.append(Config(vehicule,'droite')) 
+            if vehicule.orientation == 'vertical':
+                if self.est_valide(vehicule, 'bas'):
+                    liste.append(Config(vehicule,'bas'))
+                if self.est_valide(vehicule,'haut'):
+                    liste.append(Config(vehicule,'haut'))
+        return liste
+                                    
+        
+        
+    def est_valide(self,vehicule:Vehicule,mouvement)->bool:
         """ verifier si une position est valide
 
         Précondition :
@@ -43,24 +98,22 @@ class Plateau():
         $$$ R = Vehicule(5,2,3,'horizontal','R')
         $$$ B = Vehicule(2,3,2,'vertical','B') 
         $$$ p = Plateau([A,Z,C,R,B])
-        $$$ p.est_valide(B,'haut',2)
+        $$$ p.est_valide(B,'haut')
         True
-        $$$ p.est_valide(B,'gauche',2)
+        $$$ p.est_valide(B,'gauche')
         False
         """
         
-        # la variable de_combien est saisie par l'utilisateur dans le module jeu et elle est utilisée dans ce cas pour voir si le pas vers lequel l'utilisateur veut aller est possible
-        
         cellules_vehicule = vehicule.get_vehicule_cells()
         if vehicule.orientation == 'horizontal':
             if mouvement == 'gauche':
-                y = cellules_vehicule[0].y - de_combien
+                y = cellules_vehicule[0].y - 1
                 x = cellules_vehicule[0].x
                 if y >= 0 and self.grille[x][y].couleur == '*' :
                     return True
                 return False
             elif mouvement == 'droite':
-                y = cellules_vehicule[-1].y + de_combien
+                y = cellules_vehicule[-1].y + 1
                 x = cellules_vehicule[-1].x
                 if y<=5 and self.grille[x][y].couleur == '*':
                     return True
@@ -68,21 +121,36 @@ class Plateau():
             
         elif vehicule.orientation == 'vertical':
             if mouvement == 'haut':
-                x = cellules_vehicule[0].x - de_combien
+                x = cellules_vehicule[0].x - 1
                 y = cellules_vehicule[0].y
                 if x>=0 and self.grille[x][y].couleur == '*' :
                     return True
                 return False
             elif mouvement == 'bas':
-                x = cellules_vehicule[-1].x + de_combien
+                x = cellules_vehicule[-1].x + 1
                 y = cellules_vehicule[-1].y
-                if x>=0 and self.grille[x][y].couleur == '*' :
+                if x<=5 and self.grille[x][y].couleur == '*' :
                     return True
                 return False
         return False  
+    
+    def __eq__(self,other)->bool:
+        """ à_remplacer_par_ce_que_fait_la_fonction
+
+        Précondition :
+        Exemple(s) :
+        $$$
+        """
+        for i in range(6):
+            for j in range(6):
+                if self.grille[i][j] != other.grille[i][j]:
+                    return False
+        return True
+        
+        
+        
                 
-                
-    def recherhe_voiture(self,couleur)->Vehicule:
+    def recherche_voiture(self,couleur)->Vehicule:
         """ recherche la voiture dans la liste de voitures sur le plateau
 
         Précondition :
@@ -93,9 +161,8 @@ class Plateau():
         $$$ R = Vehicule(5,2,3,'horizontal','R')
         $$$ B = Vehicule(2,3,2,'vertical','B') 
         $$$ p = Plateau([A,Z,C,R,B])
-        $$$ p.recherhe_voiture('A').couleur
-        'A'
-        $$$ p
+        $$$ p.recherche_voiture('A')
+        Vehicule(0,0,2,'horizontal','A')
         
         """
         for  vehicule in self.vehicules:
@@ -104,32 +171,7 @@ class Plateau():
         return None
 
     
-    def deplacer(self,vehicule:Vehicule,mouvement,de_combien):
-        """ deplacement de l'objet voiture
-
-        Précondition :
-        Exemple(s) :
-        $$$ 
-        
-        """
-        # la variable de_combien permet de deplacer le vehicule dans la mesure du possible d'un nombre de pas
-        for cell in vehicule.get_vehicule_cells():
-            self.grille[cell.x][cell.y].couleur = '*' 
-        
-        if vehicule.orientation == 'horizontal':
-            if mouvement == 'gauche':
-                vehicule.y_deb -= de_combien
-            elif mouvement == 'droite':
-                vehicule.y_deb +=  de_combien
-        elif vehicule.orientation == 'vertical':
-            if mouvement == 'bas':
-                vehicule.x_deb +=de_combien
-            elif mouvement == 'haut':
-                vehicule.x_deb -= de_combien 
-        for cell in vehicule.get_vehicule_cells():
-            self.grille[cell.x][cell.y] = cell
-        
-        
+    
     def est_fini(self)->bool:
         """ montre quand le jeu se termine
 
@@ -147,13 +189,33 @@ class Plateau():
         $$$ s.est_fini()
         True
         """
-        vehicule_Z = self.recherhe_voiture('Z')
+        vehicule_Z = self.recherche_voiture('Z')
         for i in range(vehicule_Z.y_deb + vehicule_Z.taille,6):
             if self.grille[2][i].couleur != '*':
                 return False
         return True
     
-
-         
     
+    
+                    
+
+                    
+                    
+                    
+                    
+                    
+                        
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
         
\ No newline at end of file
diff --git a/projet_rush_hour/vehicule.py b/projet_rush_hour/vehicule.py
index 3ca3144c5794ee9bafb6623c1f1cb89a8345e5e5..070be566b3866c62c32cb781add021c1185ca521 100644
--- a/projet_rush_hour/vehicule.py
+++ b/projet_rush_hour/vehicule.py
@@ -3,7 +3,7 @@ from cellule import Cell
 class Vehicule():
 
 
-    """ construit un vehicule qui est une liste de cellule
+    """ construit un vehicule qui est une liste de cellule caracterisé par sa taille orientation x_deb,y_deb,et sa couleur 
     
 
     Exemple(s) :
@@ -18,6 +18,11 @@ class Vehicule():
     'horizontal'
     $$$ v1.couleur
     'Z'
+    $$$ v2 = Vehicule(2,1,2,'horizontal','A')
+    $$$ v1 == v2
+    False
+    $$$ v3 = Vehicule(2,1,2,'horizontal','A')
+    $$$ v3 == v2
     """
     def __init__(self,x_deb,y_deb,taille,orientation,couleur):
         """ à_remplacer_par_ce_que_fait_la_fonction
@@ -59,5 +64,20 @@ class Vehicule():
         Exemple(s) :
         $$$
         """
-        return True
+        if not isinstance(other,Vehicule):
+            return False
+        if (self.x_deb == other.x_deb and self.y_deb == other.y_deb and self.taille == other.taille and self.orientation == other.orientation and self.couleur == other.couleur):
+            return True
+        return False
+    
+    
+    def __repr__(self)->str:
+        """ à_remplacer_par_ce_que_fait_la_fonction
 
+        Précondition :
+        Exemple(s) :
+        $$$
+        """
+        return f'Vehicule({self.x_deb},{self.y_deb},{self.taille},{self.orientation},{self.couleur})'
+    
+    
diff --git a/tp5_AP/p1.py b/tp5_AP/p1.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000