From f23e6aa3546a7c851f3f297b0b144e99b4f7bb54 Mon Sep 17 00:00:00 2001 From: Haffa Bakhouche Date: Sat, 16 Nov 2024 11:24:19 +0100 Subject: [PATCH] =?UTF-8?q?Ajuster=20le=20positionnement=20et=20l'=C3=A9ch?= =?UTF-8?q?elle=20de=20la=20grille=20pour=20respecter=20les=20limites=20de?= =?UTF-8?q?=20la=20fen=C3=AAtre?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- blocus | Bin 16592 -> 20600 bytes jeu.c | 185 +++++++++++++++++++++++++++++++++++---------------------- jeu.h | 16 ++--- main.c | 148 +++++++++++++++++++++++++-------------------- 4 files changed, 201 insertions(+), 148 deletions(-) diff --git a/blocus b/blocus index fc48cc565114b4351f26e3126b8d73918303e876..d0975e521ef975820bd57c53f8ca458a98eb50d6 100755 GIT binary patch literal 20600 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 R7!N@|a)+?R&@`ZN836vfv5Eiy literal 16592 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 diff --git a/jeu.c b/jeu.c index 144e9d3..69ee3e6 100755 --- a/jeu.c +++ b/jeu.c @@ -1,119 +1,162 @@ #include #include #include "jeu.h" -#include /* Assurez-vous d'inclure la bibliothèque graphique */ +#include -/* Fonction pour dessiner un cercle */ void DessinerCercle(int x, int y, int rayon) { DessinerArc(x - rayon, y - rayon, 2 * rayon, 2 * rayon, 0, 360); } -/* Fonction pour dessiner la grille */ void dessinerGrille(struct EtatJeu etatJeu) { int i, j; - int largeurFenetre = 800; /* Largeur de la fenêtre */ - int hauteurFenetre = 600; /* Hauteur de la fenêtre */ + int largeurFenetre = 800; + int hauteurFenetre = 600; + int marge = 50; /* Marge pour éviter les bords */ - /* Calculer la taille de chaque case pour remplir complètement la fenêtre */ - int tailleCase = (largeurFenetre < hauteurFenetre) ? (largeurFenetre / etatJeu.tailleGrille) : (hauteurFenetre / etatJeu.tailleGrille); - - /* Ajuster la taille de la case pour qu'elle prenne tout l'espace */ - if (tailleCase * etatJeu.tailleGrille > hauteurFenetre) { - tailleCase = hauteurFenetre / etatJeu.tailleGrille; + /* Calculer la taille de case en prenant le minimum entre largeur et hauteur */ + int tailleCase = (largeurFenetre - 2 * marge) / etatJeu.tailleGrille; + if (tailleCase * etatJeu.tailleGrille > (hauteurFenetre - 2 * marge)) { + tailleCase = (hauteurFenetre - 2 * marge) / etatJeu.tailleGrille; } - - /* Dessiner la grille */ + + /* Calculer les positions de départ pour centrer la grille */ + int startX = (largeurFenetre - (tailleCase * etatJeu.tailleGrille)) / 2; + int startY = (hauteurFenetre - (tailleCase * etatJeu.tailleGrille)) / 2; + + EffacerEcran(CouleurParNom("white")); + for (i = 0; i < etatJeu.tailleGrille; i++) { for (j = 0; j < etatJeu.tailleGrille; j++) { - int x = j * tailleCase; /* Calculer la position x */ - int y = i * tailleCase; /* Calculer la position y */ - ChoisirCouleurDessin(CouleurParNom("black")); /* Couleur de la grille */ - DessinerRectangle(x, y, tailleCase, tailleCase); /* Dessiner le rectangle pour la case */ + int x = startX + (j * tailleCase); + int y = startY + (i * tailleCase); - /* Dessiner les pièces bloquées */ - if (etatJeu.grille[i][j] == 1) { /* 1 pour l'humain */ + ChoisirCouleurDessin(CouleurParNom("black")); + DessinerRectangle(x, y, tailleCase, tailleCase); + + if (etatJeu.grille[i][j] == 1) { ChoisirCouleurDessin(CouleurParNom("blue")); - DessinerCercle(x + tailleCase / 2, y + tailleCase / 2, tailleCase / 4); /* Dessiner un cercle bleu */ - } else if (etatJeu.grille[i][j] == 2) { /* 2 pour l'IA */ + RemplirRectangle(x + 5, y + 5, tailleCase - 10, tailleCase - 10); + } else if (etatJeu.grille[i][j] == 2) { ChoisirCouleurDessin(CouleurParNom("red")); - DessinerCercle(x + tailleCase / 2, y + tailleCase / 2, tailleCase / 4); /* Dessiner un cercle rouge */ + RemplirRectangle(x + 5, y + 5, tailleCase - 10, tailleCase - 10); } } } } void gererClicSouris(struct EtatJeu *etatJeu) { - int x, y; - int tailleCase; - int i, j; - - if (SourisCliquee()) { - x = _X; /* Position X du clic */ - y = _Y; /* Position Y du clic */ - - tailleCase = 800 / etatJeu->tailleGrille; /* Taille de chaque case */ - i = y / tailleCase; /* Ligne cliquée */ - j = x / tailleCase; /* Colonne cliquée */ - - /* Vérifier si la case est libre */ - if (i < etatJeu->tailleGrille && j < etatJeu->tailleGrille && etatJeu->grille[i][j] == 0) { - etatJeu->grille[i][j] = 1; /* Marquer la case comme bloquée par l'humain */ - dessinerGrille(*etatJeu); /* Redessiner la grille */ - jouerAvecIA(*etatJeu); /* Appeler la fonction de l'IA pour bloquer une case */ - } + int x = _X; + int y = _Y; + int largeurFenetre = 800; + int hauteurFenetre = 600; + int marge = 50; + + int tailleCase = (largeurFenetre - 2 * marge) / etatJeu->tailleGrille; + if (tailleCase * etatJeu->tailleGrille > (hauteurFenetre - 2 * marge)) { + tailleCase = (hauteurFenetre - 2 * marge) / etatJeu->tailleGrille; + } + + 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; + + dessinerGrille(*etatJeu); } } -/* Fonction pour initialiser l'état du jeu */ + struct EtatJeu initialiserJeu(int tailleGrille, int mode) { struct EtatJeu etatJeu; int i, j; etatJeu.tailleGrille = tailleGrille; etatJeu.mode = mode; - etatJeu.tourJoueur = 1; /* Initialiser le joueur courant */ - etatJeu.phase = 0; /* Initialiser la phase */ - etatJeu.positionSourisJoueur1x = -1; /* Initialiser les positions de la souris */ - etatJeu.positionSourisJoueur1y = -1; - etatJeu.positionSourisJoueur2x = -1; - etatJeu.positionSourisJoueur2y = -1; + etatJeu.tourJoueur = 1; + etatJeu.phase = 0; - /* Allouer de la mémoire pour la grille */ etatJeu.grille = (int**)malloc(tailleGrille * sizeof(int*)); - if (etatJeu.grille == NULL) { - fprintf(stderr, "Erreur d'allocation mémoire\n"); - exit(1); - } - for (i = 0; i < tailleGrille; i++) { etatJeu.grille[i] = (int*)malloc(tailleGrille * sizeof(int)); - if (etatJeu.grille[i] == NULL) { - for (j = 0; j < i; j++) { - free(etatJeu.grille[j]); - } - free(etatJeu.grille); - fprintf(stderr, "Erreur d'allocation mémoire\n"); - exit(1); - } for (j = 0; j < tailleGrille; j++) { - etatJeu.grille[i][j] = 0; /* Initialiser les cellules de la grille à 0 */ + etatJeu.grille[i][j] = 0; } } return etatJeu; } -/* Fonction pour jouer avec l'IA */ -void jouerAvecIA(struct EtatJeu etatJeu) { +int verifierVictoire(struct EtatJeu etatJeu) { int i, j; - /* Logique simple pour que l'IA bloque une case */ + for (i = 0; i < etatJeu.tailleGrille; i++) { - for (j = 0; j < etatJeu.tailleGrille; j++) { - if (etatJeu.grille[i][j] == 0) { /* Trouver une case libre */ - etatJeu.grille[i][j] = 2; /* Marquer la case comme bloquée par l'IA */ - dessinerGrille(etatJeu); /* Redessiner la grille */ - return; /* Sortir après avoir bloqué une case */ + if (etatJeu.grille[i][0] != 0) { + int gagnant = etatJeu.grille[i][0]; + int victoire = 1; + for (j = 1; j < etatJeu.tailleGrille; j++) { + if (etatJeu.grille[i][j] != gagnant) { + victoire = 0; + break; + } } + if (victoire) return gagnant; } } + + for (j = 0; j < etatJeu.tailleGrille; j++) { + if (etatJeu.grille[0][j] != 0) { + int gagnant = etatJeu.grille[0][j]; + int victoire = 1; + for (i = 1; i < etatJeu.tailleGrille; i++) { + if (etatJeu.grille[i][j] != gagnant) { + victoire = 0; + break; + } + } + if (victoire) return gagnant; + } + } + + if (etatJeu.grille[0][0] != 0) { + int gagnant = etatJeu.grille[0][0]; + int victoire = 1; + for (i = 1; i < etatJeu.tailleGrille; i++) { + if (etatJeu.grille[i][i] != gagnant) { + victoire = 0; + break; + } + } + if (victoire) return gagnant; + } + + if (etatJeu.grille[0][etatJeu.tailleGrille - 1] != 0) { + int gagnant = etatJeu.grille[0][etatJeu.tailleGrille - 1]; + int victoire = 1; + for (i = 1; i < etatJeu.tailleGrille; i++) { + if (etatJeu.grille[i][etatJeu.tailleGrille - 1 - i] != gagnant) { + victoire = 0; + break; + } + } + if (victoire) return gagnant; + } + + return 0; } -/* Ajouter d'autres fonctions de logique de jeu si nécessaire */ diff --git a/jeu.h b/jeu.h index 92aaff8..2e75e1a 100644 --- a/jeu.h +++ b/jeu.h @@ -1,12 +1,9 @@ -/* jeu.h */ - #ifndef JEU_H #define JEU_H -/* Définir la structure pour l'état du jeu */ struct EtatJeu { - int tailleGrille; /* Taille de la grille */ - int mode; /* Mode de jeu (1 joueur ou 2 joueurs) */ + int tailleGrille; + int mode; int tourJoueur; int phase; int positionSourisJoueur1x; @@ -14,16 +11,13 @@ struct EtatJeu { int positionSourisJoueur2x; int positionSourisJoueur2y; int** grille; - /* Ajouter d'autres variables d'état du jeu si nécessaire */ }; -/* Fonction pour initialiser l'état du jeu */ struct EtatJeu initialiserJeu(int tailleGrille, int mode); - -/* Fonction pour jouer avec l'IA */ void jouerAvecIA(struct EtatJeu etatJeu); - -/* Ajouter d'autres prototypes de fonction liés à la logique du jeu */ void gererClicSouris(struct EtatJeu *etatJeu); +void dessinerGrille(struct EtatJeu etatJeu); +void DessinerCercle(int x, int y, int rayon); +int verifierVictoire(struct EtatJeu etatJeu); #endif /* JEU_H */ \ No newline at end of file diff --git a/main.c b/main.c index 7b21d67..016df1d 100755 --- a/main.c +++ b/main.c @@ -2,88 +2,104 @@ #include #include #include -#include "jeu.h" /* Inclure l'en-tête pour la logique du jeu */ +#include "jeu.h" void menuPrincipale() { - int tailleGrille = 3; /* Taille de la grille */ - int continuer = 1; /* Variable pour continuer le menu */ - int besoinRedessiner = 1; /* Drapeau pour indiquer si un redessin est nécessaire */ + int tailleGrille = 3; + int continuer = 1; + char tailleStr[4]; - char tailleStr[4]; /* Augmenter la taille pour contenir des nombres plus grands */ - - InitialiserGraphique(); /* Initialiser la graphique */ - CreerFenetre(100, 100, 800, 600); /* Créer la fenêtre */ - ChoisirTitreFenetre("Blocus"); /* Choisir le titre de la fenêtre */ + InitialiserGraphique(); + CreerFenetre(100, 100, 800, 600); + ChoisirTitreFenetre("Blocus"); - while (continuer) { /* Boucle principale du menu */ - if (besoinRedessiner) { /* Redessiner uniquement si nécessaire */ - EffacerEcran(CouleurParNom("white")); /* Effacer l'écran */ - - ChoisirCouleurDessin(CouleurParNom("black")); /* Choisir la couleur noire pour le dessin */ - EcrireTexte(300, 50, "BLOCUS", 2); /* Écrire le titre du jeu */ - - EcrireTexte(250, 120, "Taille de la grille:", 1); /* Écrire le texte pour la taille de la grille */ - sprintf(tailleStr, "%d", tailleGrille); /* Convertir la taille de la grille en chaîne */ - EcrireTexte(450, 120, tailleStr, 1); /* Afficher la taille de la grille */ - - RemplirRectangle(500, 110, 30, 30); /* Dessiner le rectangle pour augmenter la taille */ - RemplirRectangle(540, 110, 30, 30); /* Dessiner le rectangle pour diminuer la taille */ - ChoisirCouleurDessin(CouleurParNom("white")); /* Choisir la couleur blanche pour le texte */ - EcrireTexte(510, 120, "+", 1); /* Écrire le symbole pour augmenter */ - EcrireTexte(550, 120, "-", 1); /* Écrire le symbole pour diminuer */ - - ChoisirCouleurDessin(CouleurParNom("black")); /* Choisir la couleur noire pour le dessin */ - RemplirRectangle(250, 180, 300, 50); /* Dessiner le rectangle pour le mode 1 joueur */ - RemplirRectangle(250, 250, 300, 50); /* Dessiner le rectangle pour le mode 2 joueurs */ - ChoisirCouleurDessin(CouleurParNom("white")); /* Choisir la couleur blanche pour le texte */ - EcrireTexte(280, 195, "1 Joueur (contre IA)", 1); /* Écrire le texte pour le mode 1 joueur */ - EcrireTexte(280, 265, "2 Joueurs (Humain vs Humain)", 1); /* Écrire le texte pour le mode 2 joueurs */ - - ChoisirCouleurDessin(CouleurParNom("black")); /* Choisir la couleur noire pour le dessin */ - RemplirRectangle(250, 320, 300, 50); /* Dessiner le rectangle pour quitter */ - ChoisirCouleurDessin(CouleurParNom("white")); /* Choisir la couleur blanche pour le texte */ - EcrireTexte(320, 335, "Quitter", 1); /* Écrire le texte pour quitter */ - - besoinRedessiner = 0; /* Réinitialiser le drapeau de redessin */ - } + 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 (SourisCliquee()) { /* Vérifier si la souris est cliquée */ - if (_Y >= 110 && _Y <= 140) { /* Vérifier si le clic est dans la zone de taille de grille */ - if (_X >= 500 && _X <= 530 && tailleGrille < 9) { /* Augmenter la taille de la grille */ + if (SourisCliquee()) { + int mouseX = _X; + int mouseY = _Y; + printf("Menu click at: (%d, %d)\n", mouseX, mouseY); + + if (mouseX >= 500 && mouseX <= 530 && mouseY >= 110 && mouseY <= 140) { + if (tailleGrille < 9) { tailleGrille++; - besoinRedessiner = 1; /* Indiquer qu'un redessin est nécessaire */ - } else if (_X >= 540 && _X <= 570 && tailleGrille > 3) { /* Diminuer la taille de la grille */ - tailleGrille--; - besoinRedessiner = 1; /* Indiquer qu'un redessin est nécessaire */ } - } else if (_X >= 250 && _X <= 550) { /* Vérifier si le clic est dans la zone de mode de jeu */ - if (_Y >= 180 && _Y <= 230) { /* Mode 1 joueur */ - struct EtatJeu etatJeu = initialiserJeu(tailleGrille, 1); /* Initialiser l'état du jeu */ - EffacerEcran(CouleurParNom("white")); /* Effacer l'écran pour afficher la grille */ - dessinerGrille(etatJeu); /* Dessiner la grille */ + } else if (mouseX >= 540 && mouseX <= 570 && mouseY >= 110 && mouseY <= 140) { + if (tailleGrille > 3) { + tailleGrille--; + } + } else if (mouseX >= 250 && mouseX <= 550) { + struct EtatJeu etatJeu; + if (mouseY >= 180 && mouseY <= 230) { + etatJeu = initialiserJeu(tailleGrille, 1); + EffacerEcran(CouleurParNom("white")); + dessinerGrille(etatJeu); - /* Boucle pour garder la fenêtre ouverte */ - while (!SourisCliquee()) { - gererClicSouris(&etatJeu); /* Gérer les clics de souris */ - usleep(10000); /* Attendre un court instant */ + 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); } - continuer = 0; /* Sortir du menu */ - } else if (_Y >= 250 && _Y <= 300) { /* Mode 2 joueurs */ - continuer = 0; /* Sortir du menu */ - } else if (_Y >= 320 && _Y <= 370) { /* Quitter */ - continuer = 0; /* Sortir du menu */ + } 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); + } + } else if (mouseY >= 320 && mouseY <= 370) { + continuer = 0; } } } - usleep(10000); /* Attendre 10 millisecondes pour améliorer la réactivité */ + usleep(10000); } - FermerGraphique(); /* Fermer la graphique */ + FermerGraphique(); } - int main() { - menuPrincipale(); /* Appeler la fonction du menu principal */ - return 0; /* Retourner 0 pour indiquer que le programme s'est terminé avec succès */ + menuPrincipale(); + return 0; }