diff --git a/puissance4_GRB/puissance4.c b/puissance4_GRB/puissance4.c
index be901de33d180aa59af58ec8eaad480daeaed378..6354c87e8aef99f6cea21af36e086aff56e51181 100644
--- a/puissance4_GRB/puissance4.c
+++ b/puissance4_GRB/puissance4.c
@@ -184,6 +184,202 @@ int Launch_puissance4(){
 	return winner;//boucle sa mere... jusqu'à ce que la grille soit pleine, ou que un winner a été détecté
 }
 
+int Launch_puissance4_randBot(int seed){
+	symbol_t winner=EMPTY;
+	int chiffre=0;
+	srand(seed);
+
+	while(winner==EMPTY){
+		//print_grille();
+		//print_gameCells();
+		print_game();
+		printf("Column number? (starts at 1):\n");
+		//printf("au tour de %d de jouer\n", game.curr_player);
+		//printf("balance un chiffre entre 1 et %d\n", game.width);
+		if(game.curr_player == 1){
+			chiffre = rand()%game.width;
+		}else{
+			do{
+				scanf("%d",&chiffre);
+				chiffre-=1; //gestion des chiffres de 1 à n et non de 0 à n-1
+				if(chiffre >= game.width || chiffre < 0){
+					printf("HEP HEPHEP !! donne un chiffre dans la plage donnee manche a couille\n");
+				}
+			}while((chiffre >= game.width) || (chiffre < 0) || is_cell_free(chiffre, 0, game.players[game.curr_player].symbol)<0);
+		}
+		game.gamePlayed -= 1; //peut être le mettre plus bas non ?
+		int i = 0;
+		//verifier que put free cell fonctionne
+		if((i = put_free_cell(chiffre, game.players[game.curr_player].symbol))<0){
+			//la grille est pleine genre... ou y a un bug de zinzin
+			if(Is_Grid_full()){
+				//la grille est pleine sa mere la pute
+				//print egalite mais y a probablement eu un bug
+				printf("y a un egalite mais probablement un bug aussi mdr\n");
+				//fin du jeu
+				return EQUAL; //jeu egal ou retourner un bug ... a voir..
+			}else{
+				//il y a un bug de zinzin
+				printf("ok la y a un bug de zinzin check ca \n");
+				//print la grille pour debug
+				//print_gameCells();
+				print_game();
+				//fin du jeu
+				return -1; //erreur
+			}
+		}
+		//check de la win
+		winner = Find_winner(game.cells, game.cells[chiffre][i]);
+		if( winner != EMPTY){
+			if(winner==CROSS){
+				//reset du jeu + mise a jour des scores (scores optionels)
+				//print_gameCells();
+				print_game();
+				//printf("la croix a gagnée cette connasse\n");
+				printf("Player one won!\n");
+				//print joueur croix a gagné
+				//fin du jeu
+				return CROSS;
+			}
+			if(winner==CIRCLE){
+				//reset du jeu + mise a jour des scores (scores optionels)
+				//print joueur cercle a gagné
+				//print_gameCells();
+				print_game();
+				//printf("le cercle a gagné cet enorme zgeg\n");
+				printf("Player two won!\n");
+				//fin du jeu
+				return CIRCLE;
+			}
+		}else{
+			//sois le jeu est plein, sois y a juste pas encore de winner
+			if(Is_Grid_full()){
+				//la grille est pleine
+				//print egalite + la fin de la grille
+				print_game();
+				//printf("y a un egalite dans les regles de l'art mash'allah\n");
+				printf("It is a draw.\n");
+				//fin du jeu
+				return EQUAL;
+			}
+			//y a juste pas encore de winner ducoup...
+			game.curr_player ^= 1; //switch de joueur
+			//printf("au tour de %d de jouer\n", game.curr_player);
+		}
+	}
+	return winner;//boucle sa mere... jusqu'à ce que la grille soit pleine, ou que un winner a été détecté
+}
+
+int Launch_puissance4_smartBot(int seed){
+	symbol_t winner=EMPTY;
+	int chiffre=0;
+	srand(seed);
+
+	while(winner==EMPTY){
+		//print_grille();
+		//print_gameCells();
+		print_game();
+		printf("Column number? (starts at 1):\n");
+		//printf("au tour de %d de jouer\n", game.curr_player);
+		//printf("balance un chiffre entre 1 et %d\n", game.width);
+		if(game.curr_player == 1){
+			chiffre = SmartBot();
+		}else{
+			do{
+				scanf("%d",&chiffre);
+				chiffre-=1; //gestion des chiffres de 1 à n et non de 0 à n-1
+				if(chiffre >= game.width || chiffre < 0){
+					printf("HEP HEPHEP !! donne un chiffre dans la plage donnee manche a couille\n");
+				}
+			}while((chiffre >= game.width) || (chiffre < 0) || is_cell_free(chiffre, 0, game.players[game.curr_player].symbol)<0);
+		}
+		game.gamePlayed -= 1; //peut être le mettre plus bas non ?
+		int i = 0;
+		//verifier que put free cell fonctionne
+		if((i = put_free_cell(chiffre, game.players[game.curr_player].symbol))<0){
+			//la grille est pleine genre... ou y a un bug de zinzin
+			if(Is_Grid_full()){
+				//la grille est pleine sa mere la pute
+				//print egalite mais y a probablement eu un bug
+				printf("y a un egalite mais probablement un bug aussi mdr\n");
+				//fin du jeu
+				return EQUAL; //jeu egal ou retourner un bug ... a voir..
+			}else{
+				//il y a un bug de zinzin
+				printf("ok la y a un bug de zinzin check ca \n");
+				//print la grille pour debug
+				//print_gameCells();
+				print_game();
+				//fin du jeu
+				return -1; //erreur
+			}
+		}
+		//check de la win
+		winner = Find_winner(game.cells, game.cells[chiffre][i]);
+		if( winner != EMPTY){
+			if(winner==CROSS){
+				//reset du jeu + mise a jour des scores (scores optionels)
+				//print_gameCells();
+				print_game();
+				//printf("la croix a gagnée cette connasse\n");
+				printf("Player one won!\n");
+				//print joueur croix a gagné
+				//fin du jeu
+				return CROSS;
+			}
+			if(winner==CIRCLE){
+				//reset du jeu + mise a jour des scores (scores optionels)
+				//print joueur cercle a gagné
+				//print_gameCells();
+				print_game();
+				//printf("le cercle a gagné cet enorme zgeg\n");
+				printf("Player two won!\n");
+				//fin du jeu
+				return CIRCLE;
+			}
+		}else{
+			//sois le jeu est plein, sois y a juste pas encore de winner
+			if(Is_Grid_full()){
+				//la grille est pleine
+				//print egalite + la fin de la grille
+				print_game();
+				//printf("y a un egalite dans les regles de l'art mash'allah\n");
+				printf("It is a draw.\n");
+				//fin du jeu
+				return EQUAL;
+			}
+			//y a juste pas encore de winner ducoup...
+			game.curr_player ^= 1; //switch de joueur
+			//printf("au tour de %d de jouer\n", game.curr_player);
+		}
+	}
+	return winner;//boucle sa mere... jusqu'à ce que la grille soit pleine, ou que un winner a été détecté
+}
+
+int SmartBot(){
+	int pos=0;
+	for(int chfr=0; chfr<game.width; chfr++){
+		//verifie que le coup est jouable
+		if((pos = put_free_cell(chfr, game.players[game.curr_player].symbol))>=0){
+			struct cell *tempCell = &game.cells[chfr][pos];
+			if (Find_winner(game.cells, game.cells[chfr][pos]) == game.players[game.curr_player].symbol){
+				 //1er cas : a trouvé le bon coup à jouer pour gagner
+				tempCell->symbol = EMPTY;
+				return chfr;
+			}
+			//tente de chercher si l'autre joueur a un coup gagnant
+			tempCell->symbol = game.players[game.curr_player^1].symbol;
+			if (Find_winner(game.cells, game.cells[chfr][pos]) == game.players[game.curr_player^1].symbol){
+				//2e cas : joue le coup gagnant de l'autre joueur pour le bloquer
+				tempCell->symbol = EMPTY;
+				return chfr;
+			}
+		}
+	}
+	//3e cas : joue un coup au hasard
+	return rand()%game.width;
+}
+
 bool Is_Grid_full(){
 	return game.gamePlayed == 0;
 }
diff --git a/puissance4_GRB/puissance4.h b/puissance4_GRB/puissance4.h
index dac6e3c7dc5bf295dbf844bad708e6bfb9ed5251..6ceb1a684f2c0eb9cd91a616b4a9df1977db7d6a 100644
--- a/puissance4_GRB/puissance4.h
+++ b/puissance4_GRB/puissance4.h
@@ -48,6 +48,10 @@ int kill_game();
 int put_free_cell(int j_p, symbol_t symbol);
 int is_cell_free(int j_p, int i, symbol_t symbol);
 int Launch_puissance4();
+int Launch_puissance4_randBot(int seed);
+int Launch_puissance4_smartBot(int seed);
+
+int SmartBot();
 bool Is_Grid_full();
 
 void print_game();