#include <stdio.
h>
#include <stdlib.h>
#include <stdbool.h>
#define ROWS 6
#define COLS 7
enum cell { BLUE, RED, NONE };
typedef enum cell cell;
typedef struct {
cell board[ROWS][COLS];
} connect;
void print(cell c) {
if (c == BLUE)
printf("🔵");
if (c == RED)
printf("🔴");
if (c == NONE)
printf(" ");
void print_line(int n, char c) {
for (int i = 0; i < n; i++) {
printf("%c", c);
void init_plateau(connect *jeu) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
jeu->board[i][j] = NONE;
void affichage_plateau(connect *jeu) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
print(jeu->board[i][j]);
printf("\n");
print_line(COLS * 3, '-');
printf("\n");
for (int j = 1; j <= COLS; j++) {
printf(" %d ", j);
}
printf("\n\n");
int drop_jeton(connect *jeu, int col, cell player) {
if (col < 1 || col > COLS) {
printf("Erreur, veuillez choisir une colonne entre 1 et %d.\n", COLS);
return 0;
col--;
for (int i = ROWS - 1; i >= 0; i--) {
if (jeu->board[i][col] == NONE) {
jeu->board[i][col] = player;
return 1;
printf("La colonne est pleine, veuillez choisir une autre colonne.\n");
return 0;
int verif_winner(connect *jeu, int row, int col) {
cell player = jeu->board[row][col];
// Verif horizontal
int count = 1;
int i = col - 1;
while (i >= 0 && jeu->board[row][i] == player) {
count++;
i--;
i = col + 1;
while (i < COLS && jeu->board[row][i] == player) {
count++;
i++;
if (count >= 5) {
return 1; // Gagnant
// Verif verticale
count = 1;
int j = row - 1;
while (j >= 0 && jeu->board[j][col] == player) {
count++;
j--;
}
j = row + 1;
while (j < ROWS && jeu->board[j][col] == player) {
count++;
j++;
if (count >= 5) {
return 1;
// Verif diagonale 1 (droite)
count = 1;
i = col - 1;
j = row - 1;
while (i >= 0 && j >= 0 && jeu->board[j][i] == player) {
count++;
i--;
j--;
i = col + 1;
j = row + 1;
while (i < COLS && j < ROWS && jeu->board[j][i] == player) {
count++;
i++;
j++;
}
if (count >= 5) {
return 1;
// Verif diagonale 2 (gauche)
count = 1;
i = col + 1;
j = row - 1;
while (i < COLS && j >= 0 && jeu->board[j][i] == player) {
count++;
i++;
j--;
i = col - 1;
j = row + 1;
while (i >= 0 && j < ROWS && jeu->board[j][i] == player) {
count++;
i--;
j++;
if (count >= 5) {
return 1;
return 0; // Pas de vainqueur
}
int main() {
connect jeu;
init_plateau(&jeu);
int turn = 0; // 0 pour le joueur Bleu, 1 pour le joueur Rouge
int column;
do {
affichage_plateau(&jeu);
if (turn == 0) {
printf("Au tour du joueur BLEU de jouer\n");
} else {
printf("AU tour du joueur ROUGE de jouer\n");
printf("Entrer un numéro de colonne : (1-%d): ", COLS);
scanf("%d", &column);
if (drop_jeton(&jeu, column, turn == 0 ? BLUE : RED)) {
if (verif_winner(&jeu, ROWS - 1, column - 1)) {
affichage_plateau(&jeu);
printf("Le joueur %s a gagné, Félicitacions!\n", turn == 0 ? "BLUE" : "RED");
break;
turn = 1 - turn; // changer de tour
} while (1);
return 0;