diff --git a/blocus b/blocus index d0975e5..8af1bfd 100755 Binary files a/blocus and b/blocus differ diff --git a/jeu.c b/jeu.c index 69ee3e6..1ec2327 100755 --- a/jeu.c +++ b/jeu.c @@ -11,15 +11,32 @@ void dessinerGrille(struct EtatJeu etatJeu) { int i, j; int largeurFenetre = 800; int hauteurFenetre = 600; - int marge = 50; /* Marge pour éviter les bords */ + int marge = 50; - /* Calculer la taille de case en prenant le minimum entre largeur et hauteur */ + /* Effacer l'écran avant tout dessin */ + EffacerEcran(CouleurParNom("white")); + + /* Afficher le tour du joueur actuel */ + ChoisirCouleurDessin(CouleurParNom("black")); + char message[50]; + sprintf(message, "Tour du Joueur %d", etatJeu.tourJoueur); + EcrireTexte(300, 30, message, 2); + + /* Afficher la couleur du joueur */ + if (etatJeu.tourJoueur == 1) { + ChoisirCouleurDessin(CouleurParNom("blue")); + EcrireTexte(500, 30, "(Bleu)", 2); + } else { + ChoisirCouleurDessin(CouleurParNom("red")); + EcrireTexte(500, 30, "(Rouge)", 2); + } + + /* Le reste du code de dessin de la grille reste identique */ int tailleCase = (largeurFenetre - 2 * marge) / etatJeu.tailleGrille; if (tailleCase * etatJeu.tailleGrille > (hauteurFenetre - 2 * marge)) { tailleCase = (hauteurFenetre - 2 * marge) / etatJeu.tailleGrille; } - /* Calculer les positions de départ pour centrer la grille */ int startX = (largeurFenetre - (tailleCase * etatJeu.tailleGrille)) / 2; int startY = (hauteurFenetre - (tailleCase * etatJeu.tailleGrille)) / 2; @@ -59,26 +76,20 @@ void gererClicSouris(struct EtatJeu *etatJeu) { int startX = (largeurFenetre - (tailleCase * etatJeu->tailleGrille)) / 2; int startY = (hauteurFenetre - (tailleCase * etatJeu->tailleGrille)) / 2; - /* Ajuster les coordonnées du clic en fonction du décalage de la grille */ x -= startX; y -= startY; - /* Calculer les indices de la grille */ int i = y / tailleCase; int j = x / tailleCase; - printf("Processing click at: (%d, %d) -> Grid position: (%d, %d)\n", x, y, i, j); - if (i >= 0 && i < etatJeu->tailleGrille && j >= 0 && j < etatJeu->tailleGrille && etatJeu->grille[i][j] == 0) { etatJeu->grille[i][j] = etatJeu->tourJoueur; - printf("Placed mark for player %d at position (%d, %d)\n", - etatJeu->tourJoueur, i, j); - etatJeu->tourJoueur = (etatJeu->tourJoueur == 1) ? 2 : 1; + EffacerEcran(CouleurParNom("white")); dessinerGrille(*etatJeu); } } @@ -160,3 +171,26 @@ int verifierVictoire(struct EtatJeu etatJeu) { return 0; } + +void afficherVictoire(int gagnant) { + char message[50]; + sprintf(message, "Le Joueur %d a gagné !", gagnant); + + /* Rectangle blanc pour le message */ + ChoisirCouleurDessin(CouleurParNom("white")); + RemplirRectangle(200, 200, 400, 150); + + /* Bordure du rectangle */ + ChoisirCouleurDessin(CouleurParNom("black")); + DessinerRectangle(200, 200, 400, 150); + + /* Message de victoire */ + ChoisirCouleurDessin(gagnant == 1 ? CouleurParNom("blue") : CouleurParNom("red")); + EcrireTexte(250, 250, message, 2); + + /* Instructions */ + ChoisirCouleurDessin(CouleurParNom("black")); + EcrireTexte(220, 300, "Cliquez pour revenir au menu", 1); + + printf("Partie terminée ! Le joueur %d a gagné !\n", gagnant); +} diff --git a/jeu.h b/jeu.h index 2e75e1a..3a3398a 100644 --- a/jeu.h +++ b/jeu.h @@ -19,5 +19,6 @@ void gererClicSouris(struct EtatJeu *etatJeu); void dessinerGrille(struct EtatJeu etatJeu); void DessinerCercle(int x, int y, int rayon); int verifierVictoire(struct EtatJeu etatJeu); +void afficherVictoire(int gagnant); #endif /* JEU_H */ \ No newline at end of file diff --git a/main.c b/main.c index 016df1d..fdd9555 100755 --- a/main.c +++ b/main.c @@ -8,92 +8,86 @@ void menuPrincipale() { int tailleGrille = 3; int continuer = 1; char tailleStr[4]; + int besoinRedessiner = 1; InitialiserGraphique(); CreerFenetre(100, 100, 800, 600); ChoisirTitreFenetre("Blocus"); while (continuer) { - EffacerEcran(CouleurParNom("white")); - ChoisirCouleurDessin(CouleurParNom("black")); - EcrireTexte(300, 50, "BLOCUS", 2); - EcrireTexte(250, 120, "Taille de la grille:", 1); - sprintf(tailleStr, "%d", tailleGrille); - EcrireTexte(450, 120, tailleStr, 1); - RemplirRectangle(500, 110, 30, 30); - RemplirRectangle(540, 110, 30, 30); - ChoisirCouleurDessin(CouleurParNom("white")); - EcrireTexte(510, 120, "+", 1); - EcrireTexte(550, 120, "-", 1); - ChoisirCouleurDessin(CouleurParNom("black")); - RemplirRectangle(250, 180, 300, 50); - RemplirRectangle(250, 250, 300, 50); - ChoisirCouleurDessin(CouleurParNom("white")); - EcrireTexte(280, 195, "1 Joueur (contre IA)", 1); - EcrireTexte(280, 265, "2 Joueurs (Humain vs Humain)", 1); - ChoisirCouleurDessin(CouleurParNom("black")); - RemplirRectangle(250, 320, 300, 50); - ChoisirCouleurDessin(CouleurParNom("white")); - EcrireTexte(320, 335, "Quitter", 1); + if (besoinRedessiner) { + EffacerEcran(CouleurParNom("white")); + ChoisirCouleurDessin(CouleurParNom("black")); + EcrireTexte(300, 50, "BLOCUS", 2); + EcrireTexte(250, 120, "Taille de la grille:", 1); + sprintf(tailleStr, "%d", tailleGrille); + EcrireTexte(450, 120, tailleStr, 1); + RemplirRectangle(500, 110, 30, 30); + RemplirRectangle(540, 110, 30, 30); + ChoisirCouleurDessin(CouleurParNom("white")); + EcrireTexte(510, 120, "+", 1); + EcrireTexte(550, 120, "-", 1); + ChoisirCouleurDessin(CouleurParNom("black")); + RemplirRectangle(250, 180, 300, 50); + RemplirRectangle(250, 250, 300, 50); + ChoisirCouleurDessin(CouleurParNom("white")); + EcrireTexte(280, 195, "1 Joueur (contre IA)", 1); + EcrireTexte(280, 265, "2 Joueurs (Humain vs Humain)", 1); + ChoisirCouleurDessin(CouleurParNom("black")); + RemplirRectangle(250, 320, 300, 50); + ChoisirCouleurDessin(CouleurParNom("white")); + EcrireTexte(320, 335, "Quitter", 1); + + besoinRedessiner = 0; + } if (SourisCliquee()) { int mouseX = _X; int mouseY = _Y; - printf("Menu click at: (%d, %d)\n", mouseX, mouseY); + printf("Clic détecté dans le menu à : (%d, %d)\n", mouseX, mouseY); if (mouseX >= 500 && mouseX <= 530 && mouseY >= 110 && mouseY <= 140) { if (tailleGrille < 9) { tailleGrille++; + besoinRedessiner = 1; } } else if (mouseX >= 540 && mouseX <= 570 && mouseY >= 110 && mouseY <= 140) { if (tailleGrille > 3) { tailleGrille--; + besoinRedessiner = 1; } } else if (mouseX >= 250 && mouseX <= 550) { struct EtatJeu etatJeu; - if (mouseY >= 180 && mouseY <= 230) { - etatJeu = initialiserJeu(tailleGrille, 1); + if (mouseY >= 180 && mouseY <= 230 || mouseY >= 250 && mouseY <= 300) { + int mode = (mouseY >= 180 && mouseY <= 230) ? 1 : 2; + etatJeu = initialiserJeu(tailleGrille, mode); EffacerEcran(CouleurParNom("white")); dessinerGrille(etatJeu); while (1) { if (SourisCliquee()) { - printf("Grid click detected at: (%d, %d)\n", _X, _Y); + printf("Clic détecté sur la grille à : (%d, %d)\n", _X, _Y); gererClicSouris(&etatJeu); int gagnant = verifierVictoire(etatJeu); if (gagnant != 0) { - printf("Le joueur %d a gagné !\n", gagnant); + afficherVictoire(gagnant); + printf("En attente d'un clic pour retourner au menu...\n"); + while (!SourisCliquee()) { + usleep(100000); + } + besoinRedessiner = 1; break; } } - usleep(10000); - } - } else if (mouseY >= 250 && mouseY <= 300) { - etatJeu = initialiserJeu(tailleGrille, 2); - EffacerEcran(CouleurParNom("white")); - dessinerGrille(etatJeu); - - while (1) { - if (SourisCliquee()) { - printf("Grid click detected at: (%d, %d)\n", _X, _Y); - gererClicSouris(&etatJeu); - - int gagnant = verifierVictoire(etatJeu); - if (gagnant != 0) { - printf("Le joueur %d a gagné !\n", gagnant); - break; - } - } - usleep(10000); + usleep(20000); } } else if (mouseY >= 320 && mouseY <= 370) { continuer = 0; } } } - - usleep(10000); + usleep(20000); } FermerGraphique();