diff --git a/Drones.depend b/Drones.depend
index 4fb17ccf36083f0dea4fe37efb5d3b7af87b0060..a9f7579cf8f20145f22bbb0aa8303231b9528fda 100644
--- a/Drones.depend
+++ b/Drones.depend
@@ -16,3 +16,21 @@
 1704386369 source:c:\projet\drones\main.c
 	"jeu.h"
 
+1704582964 source:c:\projet\drone\main.c
+	"jeu.h"
+	<math.h>
+
+1704381401 c:\projet\drone\jeu.h
+	<stdio.h>
+	<stdlib.h>
+	<string.h>
+	<time.h>
+	<unistd.h>
+	<pthread.h>
+	<windows.h>
+	<conio.h>
+
+1704299777 source:c:\projet\drone\utilitaire.c
+	"jeu.h"
+	<unistd.h>
+
diff --git a/Drones.layout b/Drones.layout
index 43602087c88a913bacba58169a7f6585b8ca3431..a6552c64dc801b99fb81d10ecfbde2077adc93ca 100644
--- a/Drones.layout
+++ b/Drones.layout
@@ -2,24 +2,24 @@
 <CodeBlocks_layout_file>
 	<FileVersion major="1" minor="0" />
 	<ActiveTarget name="Debug" />
-	<File name="jeu.h" open="1" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="main.c" open="1" top="1" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="276" topLine="5" />
+			<Cursor1 position="2230" topLine="38" />
 		</Cursor>
 	</File>
-	<File name="main.c" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="msg" open="1" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="3652" topLine="77" />
+			<Cursor1 position="42" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="utilitaire.c" open="1" top="1" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="jeu.h" open="1" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="5645" topLine="114" />
+			<Cursor1 position="276" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="msg" open="1" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="utilitaire.c" open="1" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="42" topLine="0" />
+			<Cursor1 position="0" topLine="0" />
 		</Cursor>
 	</File>
 </CodeBlocks_layout_file>
diff --git a/bin/Debug/Drones.exe b/bin/Debug/Drones.exe
index 67169af73da02e7b49ecf65b3497b39d3fd51ff5..7cab517ac6bf86e1896e5fcc182d644d278ef7ed 100644
Binary files a/bin/Debug/Drones.exe and b/bin/Debug/Drones.exe differ
diff --git a/client_udp.exe b/client_udp.exe
index df8788d63420124b761f2a13843d15a6dcbcefe9..9f41f363bcdacd7a7e546573236315476544e303 100644
Binary files a/client_udp.exe and b/client_udp.exe differ
diff --git a/main.c b/main.c
index 4819062dd81b19c3343fa92d4fb5ecb4425c2064..1cf543d209c7129888a144553c3c3a8f82f22b75 100644
--- a/main.c
+++ b/main.c
@@ -1,14 +1,12 @@
 #include "jeu.h"
-
+#include<math.h>
 
 #define NUM_DRONES 1
-
 pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
 pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
 int drones_done = 0;
 
 
-
 void clearScreen() {
     system("cls");
 }
@@ -18,98 +16,99 @@ void* drone_thread(void* arg) {
     Drone* drone = thread_args->liste_drones;
     char** tableau = thread_args->tableau;
     Dimension hl = thread_args->hl;
+    //Drone liste_drones;
 
-    // Boucle sur chaque commande du drone
+
+    pthread_mutex_lock(&mutex); // Verrouillage du mutex pour acc�der � la variable partag�e
+    drones_done++; // Incr�mentation du nombre de drones ayant termin�
+    printf("Deplacement d'un drone en cours...\n");
+    pthread_cond_signal(&cond); // Signal envoy� au thread d'affichage
+    pthread_mutex_unlock(&mutex); // D�verrouillage du mutex
+
+    int maxCommandes = 0;
     for (int i = 0; i < drone->nombre_drones; ++i) {
-        printf("D�placement du Drone %d en cours...\n", i + 1);
-        for (int j = 0; j < strlen(drone->commandes[i]); j++) {
-            pthread_mutex_lock(&mutex);
-            direction(drone, i, drone->commandes[i][j], tableau, hl);
-            ajout_Drones(*drone, tableau);
-            clearScreen(); // Efface l'�cran avant chaque mise � jour de la carte
-            affichage_carte(hl, tableau);
-            pthread_mutex_unlock(&mutex);
-            usleep(900000); // Pause de 500 ms entre chaque d�placement
+        maxCommandes = fmax(maxCommandes, strlen(drone->commandes[i]));
+    }
+
+    // Boucle sur chaque commande de chaque drone, alternant entre les drones � chaque it�ration
+    for (int j = 0; j < maxCommandes; j++) {
+        pthread_mutex_lock(&mutex);
+        for (int i = 0; i < drone->nombre_drones; ++i) {
+            if (j < strlen(drone->commandes[i])) {
+                direction(drone, i, drone->commandes[i][j], tableau, hl);
+                ajout_Drones(*drone, tableau);
+                clearScreen(); // Efface l'�cran avant chaque mise � jour de la carte
+                affichage_carte(hl, tableau);
+            }
         }
+        pthread_mutex_unlock(&mutex);
+        usleep(900000); // Pause de 500 ms entre chaque d�placement
     }
 
-    // Fin du mouvement, synchronisation avec le thread d'affichage
+    // Fin du mouvement, synchronisation avec le thread principal
     pthread_mutex_lock(&mutex);
     drones_done++;
-    printf("Le Drone a termin� son d�placement.\n");
+    printf("Le Drone a termine son d�placement.\n");
+
+
     pthread_cond_signal(&cond);
     pthread_mutex_unlock(&mutex);
 
     pthread_exit(NULL);
-    return (NULL);
+    return NULL;
+
 }
 
 void* display_thread(void* arg) {
-    ThreadArgs* thread_args = (ThreadArgs*)arg;
+    //ThreadArgs* thread_args = (ThreadArgs*)arg;
 
-    // Simulation de l'affichage continu de la carte
     while (1) {
         pthread_mutex_lock(&mutex);
-        while (drones_done < NUM_DRONES) {
+        while (drones_done < NUM_DRONES * 2) {
             pthread_cond_wait(&cond, &mutex);
         }
-        // Mettre � jour l'affichage de la carte
-        clearScreen(); // Efface l'�cran avant chaque mise � jour de la carte
-        printf("Mise � jour de l'affichage de la carte...\n");
-        drones_done = 0; // R�initialiser le compteur
-        affichage_carte(thread_args->hl, thread_args->tableau);
+        //printf("Mise a jour de l'affichage de la carte...\n");
+        //affichage_carte(thread_args->hl, thread_args->tableau);
         pthread_mutex_unlock(&mutex);
+        break;  // Ajout de cette ligne pour sortir de la boucle apr�s l'affichage
     }
+
+    pthread_exit(NULL);
 }
 
 int main() {
     srand(time(NULL));
+        Dimension hl;
+        Drone liste_drones;
+        Lecture_fich("msg", &hl, &liste_drones);
 
-    // Lecture du fichier
-    Dimension hl;
-    Drone liste_drones;
-    Lecture_fich("msg", &hl, &liste_drones);
+        char** tableau = tableau_carte(hl);
+        ajout_Drones(liste_drones, tableau);
 
+        pthread_t drones;
+        pthread_t display;
 
-    // Cr�ation et affichage de la carte avec drones et obstacles
-    char** tableau = tableau_carte(hl);
-    ajout_Drones(liste_drones, tableau);
-    pthread_t drones[NUM_DRONES];
-    pthread_t display;
+        ThreadArgs thread_args = {hl, tableau, &liste_drones};
 
-    // Structure pour les arguments des threads
-    ThreadArgs thread_args = {hl, tableau, &liste_drones};
+        pthread_create(&drones, NULL, drone_thread, &thread_args);
+        pthread_create(&display, NULL, display_thread, &thread_args);
 
-    // Cr�er les threads des drones
-    for (int i = 0; i < NUM_DRONES; ++i) {
-        pthread_create(&drones[i], NULL, drone_thread, &thread_args);
-    }
+        pthread_join(drones, NULL);
+        pthread_join(display, NULL);
 
-    // Cr�er le thread d'affichage
-    pthread_create(&display, NULL, display_thread, &thread_args);
+        // Afficher les positions finales apr�s la fin du d�placement
+         affichage(hl, liste_drones);
 
-    // Attendre la fin des threads des drones
-    for (int i = 0; i < NUM_DRONES; ++i) {
-        pthread_join(drones[i], NULL);
-    }
-
-    // Le programme ne devrait jamais atteindre ce point car le thread d'affichage boucle ind�finiment
-    pthread_cancel(display);
-    pthread_join(display, NULL);
-// Affichage final des informations des drones
-affichage(hl, liste_drones);
-    // Lib�ration de la m�moire
-    for (int i = 0; i < hl.hauteur; i++) {
-        free(tableau[i]);
-    }
-    free(tableau);
+        for (int i = 0; i < hl.hauteur; i++) {
+            free(tableau[i]);
+        }
+        free(tableau);
 
-    // Lib�ration de la m�moire allou�e dans la structure Drone
-    for (int i = 0; i < liste_drones.nombre_drones; i++) {
-        free(liste_drones.commandes[i]);
-    }
-    free(liste_drones.positions);
-    free(liste_drones.commandes);
+        for (int i = 0; i < liste_drones.nombre_drones; i++) {
+            free(liste_drones.commandes[i]);
+        }
+        free(liste_drones.positions);
+        free(liste_drones.commandes);
 
     return 0;
 }
diff --git a/obj/Debug/main.o b/obj/Debug/main.o
index 8224b78f9e0abfb5c8e088d67504a412b5c53fb9..c3be021512241c5b462268c91b3c26887f3bbaee 100644
Binary files a/obj/Debug/main.o and b/obj/Debug/main.o differ
diff --git a/serveur_udp.c b/serveur_udp.c
index 1555091c8db64741ccf4d52dcacbd3658511b102..eb5ba8ffd62a398416a12876a0f0f204e004f8e8 100644
--- a/serveur_udp.c
+++ b/serveur_udp.c
@@ -20,48 +20,64 @@ void* drone_thread(void* arg) {
     Drone* drone = thread_args->liste_drones;
     char** tableau = thread_args->tableau;
     Dimension hl = thread_args->hl;
+    Drone liste_drones;
+
 
-    // Boucle sur chaque commande du drone
+    pthread_mutex_lock(&mutex); // Verrouillage du mutex pour accéder à la variable partagée
+    drones_done++; // Incrémentation du nombre de drones ayant terminé
+    printf("Deplacement d'un drone en cours...\n");
+    pthread_cond_signal(&cond); // Signal envoyé au thread d'affichage
+    pthread_mutex_unlock(&mutex); // Déverrouillage du mutex
+
+    int maxCommandes = 0;
     for (int i = 0; i < drone->nombre_drones; ++i) {
-        printf("Déplacement du Drone %d en cours...\n", i + 1);
-        for (int j = 0; j < strlen(drone->commandes[i]); j++) {
-            pthread_mutex_lock(&mutex);
-            direction(drone, i, drone->commandes[i][j], tableau, hl);
-            ajout_Drones(*drone, tableau);
-            clearScreen(); // Efface l'écran avant chaque mise à jour de la carte
-            affichage_carte(hl, tableau);
-            pthread_mutex_unlock(&mutex);
-            usleep(900000); // Pause de 500 ms entre chaque déplacement
+        maxCommandes = fmax(maxCommandes, strlen(drone->commandes[i]));
+    }
+
+    // Boucle sur chaque commande de chaque drone, alternant entre les drones à chaque itération
+    for (int j = 0; j < maxCommandes; j++) {
+        pthread_mutex_lock(&mutex);
+        for (int i = 0; i < drone->nombre_drones; ++i) {
+            if (j < strlen(drone->commandes[i])) {
+                direction(drone, i, drone->commandes[i][j], tableau, hl);
+                ajout_Drones(*drone, tableau);
+                clearScreen(); // Efface l'écran avant chaque mise à jour de la carte
+                affichage_carte(hl, tableau);
+            }
         }
+        pthread_mutex_unlock(&mutex);
+        usleep(900000); // Pause de 500 ms entre chaque déplacement
     }
 
-    // Fin du mouvement, synchronisation avec le thread d'affichage
+     // Fin du mouvement, synchronisation avec le thread principal
     pthread_mutex_lock(&mutex);
     drones_done++;
-    printf("Le Drone a terminé son déplacement.\n");
+    printf("Le Drone a termine son déplacement.\n");
+
+
     pthread_cond_signal(&cond);
     pthread_mutex_unlock(&mutex);
 
     pthread_exit(NULL);
-    return (NULL);
+    return NULL;
+
 }
 
 void* display_thread(void* arg) {
     ThreadArgs* thread_args = (ThreadArgs*)arg;
 
-    // Simulation de l'affichage continu de la carte
     while (1) {
         pthread_mutex_lock(&mutex);
-        while (drones_done < NUM_DRONES) {
+        while (drones_done < NUM_DRONES * 2) {
             pthread_cond_wait(&cond, &mutex);
         }
-        // Mettre à jour l'affichage de la carte
-        clearScreen(); // Efface l'écran avant chaque mise à jour de la carte
-        printf("Mise à jour de l'affichage de la carte...\n");
-        drones_done = 0; // Réinitialiser le compteur
-        affichage_carte(thread_args->hl, thread_args->tableau);
+        //printf("Mise a jour de l'affichage de la carte...\n");
+        //affichage_carte(thread_args->hl, thread_args->tableau);
         pthread_mutex_unlock(&mutex);
+        break;  // Ajout de cette ligne pour sortir de la boucle après l'affichage
     }
+
+    pthread_exit(NULL);
 }
 
 // Fonction pour diviser une chaîne en éléments et les stocker dans un tableau
@@ -199,31 +215,22 @@ int main() {
     // Création et affichage de la carte avec drones et obstacles
     char** tableau = tableau_carte(hl);
     ajout_Drones(liste_drones, tableau);
-    pthread_t drones[NUM_DRONES];
+    pthread_t drones;
     pthread_t display;
 
     // Structure pour les arguments des threads
     ThreadArgs thread_args = {hl, tableau, &liste_drones};
 
-    // Créer les threads des drones
-    for (int i = 0; i < NUM_DRONES; ++i) {
-        pthread_create(&drones[i], NULL, drone_thread, &thread_args);
-    }
+     pthread_create(&drones, NULL, drone_thread, &thread_args);
 
     // Créer le thread d'affichage
     pthread_create(&display, NULL, display_thread, &thread_args);
 
-    // Attendre la fin des threads des drones
-    for (int i = 0; i < NUM_DRONES; ++i) {
-        pthread_join(drones[i], NULL);
-    }
-
-    // Le programme ne devrait jamais atteindre ce point car le thread d'affichage boucle indéfiniment
-    pthread_cancel(display);
-    pthread_join(display, NULL);
+     pthread_join(drones, NULL);
+      pthread_join(display, NULL);
 // Affichage final des informations des drones
 //affichage(hl, liste_drones);
-char droneInfo[1024] = ""; // Vous pouvez ajuster la taille selon vos besoins
+char droneInfo[1024] = ""; 
     for (int i = 0; i < liste_drones.nombre_drones; ++i) {
         sprintf(droneInfo + strlen(droneInfo), "Drone %d :\n", i + 1);
         sprintf(droneInfo + strlen(droneInfo), "Position drone finale : (%d, %d, %c)\n",
diff --git a/serveur_udp.exe b/serveur_udp.exe
index 70e815f5a7e224c8fe453fb30479f134fed855b3..410ed5b339391024b3faffc65ce63eebf3def130 100644
Binary files a/serveur_udp.exe and b/serveur_udp.exe differ
diff --git a/test.txt b/test.txt
index 413a78dfa9d64240d0a6af392b7b05f72f2d1165..dd8ba099993420e99ce5db3bcd5b5a5b57546969 100644
--- a/test.txt
+++ b/test.txt
@@ -1,4 +1,4 @@
 20 20
-0 5 N LMLMLMLMM
-5 0 S MMRMMRMRRM
+0 5 N MLMLMLML
+5 0 S RMRMMRMRRM