From c160e75f704f58281829f3d3ec84393226f0d4fc Mon Sep 17 00:00:00 2001 From: Haffa Bakhouche Date: Sun, 17 Nov 2024 02:54:00 +0100 Subject: [PATCH] =?UTF-8?q?Correction=20des=20probl=C3=A8mes=20de=20scinti?= =?UTF-8?q?llement=20dans=20l'interface?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- blocus | Bin 20600 -> 20696 bytes jeu.c | 54 ++++++++++++++++++++++++++++------- jeu.h | 1 + main.c | 88 +++++++++++++++++++++++++++------------------------------ 4 files changed, 86 insertions(+), 57 deletions(-) diff --git a/blocus b/blocus index d0975e521ef975820bd57c53f8ca458a98eb50d6..8af1bfdd4fbbb83b971156a168456267fea2394f 100755 GIT binary patch delta 4737 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 KF;0&1lmh_oZUtZf delta 3994 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 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();