From 2d0a9aea00819166974a62c483d9608c0f487878 Mon Sep 17 00:00:00 2001 From: Haffa Bakhouche Date: Thu, 21 Nov 2024 12:08:15 +0100 Subject: [PATCH] =?UTF-8?q?Probl=C3=A8me=20UTF8:=20Changer=20le=20texte=20?= =?UTF-8?q?de=20fin=20et=20les=20indications=20de=20partie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- blocus | Bin 20992 -> 21152 bytes jeu.c | 10 ++++- jeu.h | 13 ++++++ jeu_humain.c | 112 +++++++++++++++++++++++++++++++++++++++++++-------- jeu_humain.h | 14 +++++-- jeu_ia.c | 22 ++++++++-- main.c | 99 +++++++++++++++++++++------------------------ 7 files changed, 192 insertions(+), 78 deletions(-) diff --git a/blocus b/blocus index b32e2874628e456bc677e87aaeae4377e713b7a6..b35d05b6e056f51c3f25a047740152f3535b1114 100755 GIT binary patch literal 21152 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 literal 20992 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 diff --git a/jeu.c b/jeu.c index f352020..41f635e 100755 --- a/jeu.c +++ b/jeu.c @@ -4,6 +4,7 @@ #include #include "jeu.h" +/* Fonction qui initialise le jeu */ struct EtatJeu initialiserJeu(int tailleGrille, int mode) { struct EtatJeu etat; int i; @@ -26,10 +27,12 @@ struct EtatJeu initialiserJeu(int tailleGrille, int mode) { return etat; } +/* Fonction qui vérifie si deux cases sont adjacentes */ int estCaseAdjacente(struct Position pos1, struct Position pos2) { return abs(pos1.x - pos2.x) <= 1 && abs(pos1.y - pos2.y) <= 1; } +/* Fonction qui vérifie si le joueur peut déplacer son pion */ int peutDeplacer(struct EtatJeu etatJeu, int joueur) { struct Position pos; int i, j; @@ -54,6 +57,7 @@ int peutDeplacer(struct EtatJeu etatJeu, int joueur) { return 0; } +/* Fonction qui affiche la grille de jeu */ void dessinerGrille(struct EtatJeu etatJeu) { int i, j; int largeurFenetre = 800; @@ -69,7 +73,7 @@ void dessinerGrille(struct EtatJeu etatJeu) { if(etatJeu.phase == 0) { sprintf(message, "Joueur %d : Placez votre pion", etatJeu.tourJoueur); } else if(etatJeu.phase == 1) { - sprintf(message, "Joueur %d : Déplacez votre pion", etatJeu.tourJoueur); + sprintf(message, "Joueur %d : Deplacez votre pion", etatJeu.tourJoueur); } else { sprintf(message, "Joueur %d : Bloquez une case", etatJeu.tourJoueur); } @@ -105,18 +109,20 @@ void dessinerGrille(struct EtatJeu etatJeu) { } } +/* Fonction qui affiche le gagnant de la partie */ void afficherVictoire(int gagnant) { char message[100]; EffacerEcran(CouleurParNom("white")); ChoisirCouleurDessin(CouleurParNom("black")); - sprintf(message, "Le joueur %d a gagné !", gagnant); + sprintf(message, "Le joueur %d remporte la partie !", gagnant); /* Affiche le gagnant après avoir clear la window de la partie */ EcrireTexte(250, 300, message, 2); EcrireTexte(200, 400, "Cliquez pour retourner au menu", 1); } +/* Fonction qui vérifie si le joueur a gagné la partie */ int verifierVictoire(struct EtatJeu etatJeu) { if (etatJeu.phase == 0) { return 0; diff --git a/jeu.h b/jeu.h index ac5a01f..a21233f 100644 --- a/jeu.h +++ b/jeu.h @@ -1,11 +1,13 @@ #ifndef JEU_H_INCLUS #define JEU_H_INCLUS +/* Structure qui représente une position sur la grille */ struct Position { int x; int y; }; +/* Structure qui représente l'état du jeu */ struct EtatJeu { int tailleGrille; int mode; @@ -16,11 +18,22 @@ struct EtatJeu { int** grille; }; +/* Fonction qui initialise le jeu */ struct EtatJeu initialiserJeu(int tailleGrille, int mode); + +/* Fonction qui dessine la grille de jeu */ void dessinerGrille(struct EtatJeu etatJeu); + +/* Fonction qui vérifie si le joueur a gagné la partie */ int verifierVictoire(struct EtatJeu etatJeu); + +/* Fonction qui affiche le gagnant de la partie */ void afficherVictoire(int gagnant); + +/* Fonction qui vérifie si deux cases sont adjacentes */ int estCaseAdjacente(struct Position pos1, struct Position pos2); + +/* Fonction qui vérifie si le joueur peut déplacer son pion */ int peutDeplacer(struct EtatJeu etatJeu, int joueur); #endif /* JEU_H_INCLUS */ diff --git a/jeu_humain.c b/jeu_humain.c index fc38cc3..4f50fda 100644 --- a/jeu_humain.c +++ b/jeu_humain.c @@ -2,18 +2,21 @@ #include #include #include +#include "jeu.h" #include "jeu_humain.h" +/* Fonction qui permet de jouer en mode humain */ void jouerModeHumain(struct EtatJeu *etatJeu) { while (1) { if (SourisCliquee()) { - printf("Clic détecté sur la grille à : (%d, %d)\n", _X, _Y); - gererClicHumain(etatJeu); + if (etatJeu->phase == 0) { + gererPlacementInitial(etatJeu); + } else { + gererTourJoueur(etatJeu); + } - int gagnant = verifierVictoire(*etatJeu); - if (gagnant != 0) { - afficherVictoire(gagnant); - printf("En attente d'un clic pour retourner au menu...\n"); + if (etatJeu->phase > 0 && !peutDeplacer(*etatJeu, etatJeu->tourJoueur)) { + afficherVictoire(etatJeu->tourJoueur == 1 ? 2 : 1); while (!SourisCliquee()) { usleep(100000); } @@ -24,35 +27,112 @@ void jouerModeHumain(struct EtatJeu *etatJeu) { } } -void gererClicHumain(struct EtatJeu *etatJeu) { - int x = _X; - int y = _Y; +/* Fonction qui gère le placement initial du joueur 1 */ +void gererPlacementInitial(struct EtatJeu *etatJeu) { + int x, y, i, j; int largeurFenetre = 800; int hauteurFenetre = 600; int marge = 50; + int tailleCase; + int startX, startY; - int tailleCase = (largeurFenetre - 2 * marge) / etatJeu->tailleGrille; + x = _X; + y = _Y; + + 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; + startX = (largeurFenetre - (tailleCase * etatJeu->tailleGrille)) / 2; + startY = (hauteurFenetre - (tailleCase * etatJeu->tailleGrille)) / 2; x -= startX; y -= startY; - int i = y / tailleCase; - int j = x / tailleCase; + i = y / tailleCase; + j = x / tailleCase; if (i >= 0 && i < etatJeu->tailleGrille && j >= 0 && j < etatJeu->tailleGrille && etatJeu->grille[i][j] == 0) { etatJeu->grille[i][j] = etatJeu->tourJoueur; - etatJeu->tourJoueur = (etatJeu->tourJoueur == 1) ? 2 : 1; + if (etatJeu->tourJoueur == 1) { + etatJeu->joueur1.x = j; + etatJeu->joueur1.y = i; + } else { + etatJeu->joueur2.x = j; + etatJeu->joueur2.y = i; + } + + if (etatJeu->tourJoueur == 2) { + etatJeu->phase = 1; + etatJeu->tourJoueur = 1; + } else { + etatJeu->tourJoueur = 2; + } - EffacerEcran(CouleurParNom("white")); dessinerGrille(*etatJeu); } } + +/* Fonction qui gère le tour du joueur 1 */ +void gererTourJoueur(struct EtatJeu *etatJeu) { + int x, y, i, j; + int largeurFenetre = 800; + int hauteurFenetre = 600; + int marge = 50; + int tailleCase; + int startX, startY; + struct Position posActuelle; + struct Position posCliquee; + + x = _X; + y = _Y; + + tailleCase = (largeurFenetre - 2 * marge) / etatJeu->tailleGrille; + if (tailleCase * etatJeu->tailleGrille > (hauteurFenetre - 2 * marge)) { + tailleCase = (hauteurFenetre - 2 * marge) / etatJeu->tailleGrille; + } + + startX = (largeurFenetre - (tailleCase * etatJeu->tailleGrille)) / 2; + startY = (hauteurFenetre - (tailleCase * etatJeu->tailleGrille)) / 2; + + x -= startX; + y -= startY; + + i = y / tailleCase; + j = x / tailleCase; + + posActuelle = etatJeu->tourJoueur == 1 ? etatJeu->joueur1 : etatJeu->joueur2; + posCliquee.x = j; + posCliquee.y = i; + + if (i >= 0 && i < etatJeu->tailleGrille && j >= 0 && j < etatJeu->tailleGrille) { + if (etatJeu->phase == 1) { + if (etatJeu->grille[i][j] == 0 && estCaseAdjacente(posActuelle, posCliquee)) { + etatJeu->grille[posActuelle.y][posActuelle.x] = 0; + etatJeu->grille[i][j] = etatJeu->tourJoueur; + + if (etatJeu->tourJoueur == 1) { + etatJeu->joueur1.x = j; + etatJeu->joueur1.y = i; + } else { + etatJeu->joueur2.x = j; + etatJeu->joueur2.y = i; + } + + etatJeu->phase = 2; + dessinerGrille(*etatJeu); + } + } else if (etatJeu->phase == 2) { + if (etatJeu->grille[i][j] == 0) { + etatJeu->grille[i][j] = 3; + etatJeu->phase = 1; + etatJeu->tourJoueur = etatJeu->tourJoueur == 1 ? 2 : 1; + dessinerGrille(*etatJeu); + } + } + } +} diff --git a/jeu_humain.h b/jeu_humain.h index f70c92f..4f49fe0 100644 --- a/jeu_humain.h +++ b/jeu_humain.h @@ -1,9 +1,15 @@ -#ifndef JEU_HUMAIN_H -#define JEU_HUMAIN_H +#ifndef JEU_HUMAIN_H_INCLUS +#define JEU_HUMAIN_H_INCLUS #include "jeu.h" +/* Fonction qui permet de jouer en mode humain */ void jouerModeHumain(struct EtatJeu *etatJeu); -void gererClicHumain(struct EtatJeu *etatJeu); -#endif +/* Fonction qui gère le placement initial du joueur 1 */ +void gererPlacementInitial(struct EtatJeu *etatJeu); + +/* Fonction qui gère le tour du joueur 1 */ +void gererTourJoueur(struct EtatJeu *etatJeu); + +#endif /* JEU_HUMAIN_H_INCLUS */ diff --git a/jeu_ia.c b/jeu_ia.c index f3a3843..796b426 100644 --- a/jeu_ia.c +++ b/jeu_ia.c @@ -5,9 +5,11 @@ #include "jeu.h" #include "jeu_ia.h" +/* Fonction qui permet de jouer avec l'IA */ void jouerModeIA(struct EtatJeu *etatJeu) { int gagnant; + /* Boucle qui permet de jouer avec l'IA */ while (1) { if (etatJeu->tourJoueur == 1) { if (SourisCliquee()) { @@ -28,6 +30,7 @@ void jouerModeIA(struct EtatJeu *etatJeu) { } } + /* Vérifie si le joueur a gagné la partie */ if (etatJeu->phase > 0) { gagnant = verifierVictoire(*etatJeu); if (gagnant != 0) { @@ -42,6 +45,7 @@ void jouerModeIA(struct EtatJeu *etatJeu) { } } +/* Fonction qui gère le placement initial de l'IA */ void gererPlacementInitialIA(struct EtatJeu *etatJeu) { int x, y, i, j; int largeurFenetre = 800; @@ -53,11 +57,12 @@ void gererPlacementInitialIA(struct EtatJeu *etatJeu) { x = _X; y = _Y; + /* Calcul de la taille de chaque case */ tailleCase = (largeurFenetre - 2 * marge) / etatJeu->tailleGrille; if (tailleCase * etatJeu->tailleGrille > (hauteurFenetre - 2 * marge)) { tailleCase = (hauteurFenetre - 2 * marge) / etatJeu->tailleGrille; } - + /* Calcul de la position de départ de la grille */ startX = (largeurFenetre - (tailleCase * etatJeu->tailleGrille)) / 2; startY = (hauteurFenetre - (tailleCase * etatJeu->tailleGrille)) / 2; @@ -67,6 +72,7 @@ void gererPlacementInitialIA(struct EtatJeu *etatJeu) { i = y / tailleCase; j = x / tailleCase; + /* Vérifie si la case est valide */ if (i >= 0 && i < etatJeu->tailleGrille && j >= 0 && j < etatJeu->tailleGrille && etatJeu->grille[i][j] == 0) { @@ -79,6 +85,7 @@ void gererPlacementInitialIA(struct EtatJeu *etatJeu) { } } +/* Fonction qui gère le tour de l'IA */ void gererTourJoueurIA(struct EtatJeu *etatJeu) { int x, y, i, j; int largeurFenetre = 800; @@ -92,11 +99,12 @@ void gererTourJoueurIA(struct EtatJeu *etatJeu) { x = _X; y = _Y; + /* Calcul de la taille de chaque case */ tailleCase = (largeurFenetre - 2 * marge) / etatJeu->tailleGrille; if (tailleCase * etatJeu->tailleGrille > (hauteurFenetre - 2 * marge)) { tailleCase = (hauteurFenetre - 2 * marge) / etatJeu->tailleGrille; } - + /* Calcul de la position de départ de la grille */ startX = (largeurFenetre - (tailleCase * etatJeu->tailleGrille)) / 2; startY = (hauteurFenetre - (tailleCase * etatJeu->tailleGrille)) / 2; @@ -106,10 +114,12 @@ void gererTourJoueurIA(struct EtatJeu *etatJeu) { i = y / tailleCase; j = x / tailleCase; + /* Position actuelle du joueur 1 */ posActuelle = etatJeu->joueur1; posCliquee.x = j; posCliquee.y = i; + /* Vérifie si la case est valide */ if (i >= 0 && i < etatJeu->tailleGrille && j >= 0 && j < etatJeu->tailleGrille) { if (etatJeu->phase == 1) { if (etatJeu->grille[i][j] == 0 && estCaseAdjacente(posActuelle, posCliquee)) { @@ -131,8 +141,10 @@ void gererTourJoueurIA(struct EtatJeu *etatJeu) { } } +/* Fonction qui permet de s'assurer que l'IA place son pion à un endroit valide */ void placementIA(struct EtatJeu *etatJeu) { int i, j; + /* Boucle qui place le pion de l'IA à un endroit valide à l'aide de random */ do { i = rand() % etatJeu->tailleGrille; j = rand() % etatJeu->tailleGrille; @@ -146,11 +158,13 @@ void placementIA(struct EtatJeu *etatJeu) { dessinerGrille(*etatJeu); } +/* Fonction qui permet à l'IA de déplacer son pion */ void deplacementIA(struct EtatJeu *etatJeu) { int dx, dy; int newX, newY; int trouve = 0; + /* Boucle qui permet de trouver une case valide pour le déplacement */ for(dx = -1; dx <= 1 && !trouve; dx++) { for(dy = -1; dy <= 1 && !trouve; dy++) { if(dx == 0 && dy == 0) continue; @@ -174,10 +188,12 @@ void deplacementIA(struct EtatJeu *etatJeu) { dessinerGrille(*etatJeu); } +/* Fonction qui permet à l'IA de placer un pion de blocage */ void blocageIA(struct EtatJeu *etatJeu) { int i, j; int trouve = 0; + /* Boucle qui permet de trouver une case valide pour le placement du pion de blocage (avec l'aide de random)*/ do { i = rand() % etatJeu->tailleGrille; j = rand() % etatJeu->tailleGrille; @@ -187,4 +203,4 @@ void blocageIA(struct EtatJeu *etatJeu) { etatJeu->phase = 1; etatJeu->tourJoueur = 1; dessinerGrille(*etatJeu); -} +} \ No newline at end of file diff --git a/main.c b/main.c index fdd9555..57f958c 100755 --- a/main.c +++ b/main.c @@ -3,6 +3,8 @@ #include #include #include "jeu.h" +#include "jeu_humain.h" +#include "jeu_ia.h" void menuPrincipale() { int tailleGrille = 3; @@ -10,79 +12,69 @@ void menuPrincipale() { char tailleStr[4]; int besoinRedessiner = 1; - InitialiserGraphique(); - CreerFenetre(100, 100, 800, 600); - ChoisirTitreFenetre("Blocus"); + InitialiserGraphique(); /* Initialise la fenêtre graphique */ + CreerFenetre(100, 100, 800, 600); /* Crée la fenêtre graphique */ + ChoisirTitreFenetre("Blocus"); /* Change le titre de la fenêtre */ while (continuer) { - if (besoinRedessiner) { - EffacerEcran(CouleurParNom("white")); - ChoisirCouleurDessin(CouleurParNom("black")); - EcrireTexte(300, 50, "BLOCUS", 2); - EcrireTexte(250, 120, "Taille de la grille:", 1); + if (besoinRedessiner) { /* Si besoin de redessiner */ + EffacerEcran(CouleurParNom("white")); /* Efface l'écran */ + ChoisirCouleurDessin(CouleurParNom("black")); /* + EcrireTexte(300, 50, "BLOCUS", 2); /* Affiche le titre du jeu */ + 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); + EcrireTexte(450, 120, tailleStr, 1); /* Affiche la taille de la grille */ - besoinRedessiner = 0; + RemplirRectangle(500, 110, 30, 30); /* Remplit la case + */ + RemplirRectangle(540, 110, 30, 30); /* Remplit la case - */ + ChoisirCouleurDessin(CouleurParNom("white")); + EcrireTexte(510, 120, "+", 1); /* Affiche le + */ + EcrireTexte(550, 120, "-", 1); /* Affiche le - */ + + ChoisirCouleurDessin(CouleurParNom("black")); + RemplirRectangle(250, 180, 300, 50); /* Remplit la case 1 Joueur (contre IA) */ + RemplirRectangle(250, 250, 300, 50); /* Remplit la case 2 Joueurs */ + ChoisirCouleurDessin(CouleurParNom("white")); + EcrireTexte(280, 195, "1 Joueur (contre IA)", 1); /* Affiche 1 Joueur (contre IA) */ + EcrireTexte(280, 265, "2 Joueurs", 1); /* Affiche 2 Joueurs */ + + ChoisirCouleurDessin(CouleurParNom("black")); + RemplirRectangle(250, 320, 300, 50); /* Remplit la case Quitter */ + ChoisirCouleurDessin(CouleurParNom("white")); + EcrireTexte(320, 335, "Quitter", 1); /* Affiche Quitter */ + + besoinRedessiner = 0; } - if (SourisCliquee()) { + if (SourisCliquee()) { /* Si la souris est cliquée */ int mouseX = _X; int mouseY = _Y; - printf("Clic détecté dans le menu à : (%d, %d)\n", mouseX, mouseY); - if (mouseX >= 500 && mouseX <= 530 && mouseY >= 110 && mouseY <= 140) { + if (mouseX >= 500 && mouseX <= 530 && mouseY >= 110 && mouseY <= 140) { /* Si la souris est sur la case + */ if (tailleGrille < 9) { tailleGrille++; besoinRedessiner = 1; } - } else if (mouseX >= 540 && mouseX <= 570 && mouseY >= 110 && mouseY <= 140) { + } else if (mouseX >= 540 && mouseX <= 570 && mouseY >= 110 && mouseY <= 140) { /* Si la souris est sur la case - */ if (tailleGrille > 3) { tailleGrille--; besoinRedessiner = 1; } - } else if (mouseX >= 250 && mouseX <= 550) { + } else if (mouseX >= 250 && mouseX <= 600) { /* Si la souris est sur la case 1 Joueur (contre IA) */ struct EtatJeu etatJeu; - if (mouseY >= 180 && mouseY <= 230 || mouseY >= 250 && mouseY <= 300) { - int mode = (mouseY >= 180 && mouseY <= 230) ? 1 : 2; - etatJeu = initialiserJeu(tailleGrille, mode); + if (mouseY >= 180 && mouseY <= 230) { + etatJeu = initialiserJeu(tailleGrille, 1); EffacerEcran(CouleurParNom("white")); dessinerGrille(etatJeu); - - while (1) { - if (SourisCliquee()) { - printf("Clic détecté sur la grille à : (%d, %d)\n", _X, _Y); - gererClicSouris(&etatJeu); - - int gagnant = verifierVictoire(etatJeu); - if (gagnant != 0) { - afficherVictoire(gagnant); - printf("En attente d'un clic pour retourner au menu...\n"); - while (!SourisCliquee()) { - usleep(100000); - } - besoinRedessiner = 1; - break; - } - } - usleep(20000); - } - } else if (mouseY >= 320 && mouseY <= 370) { + jouerModeIA(&etatJeu); + besoinRedessiner = 1; + } else if (mouseY >= 250 && mouseY <= 300) { /* Si la souris est sur la case 2 Joueurs */ + etatJeu = initialiserJeu(tailleGrille, 2); + EffacerEcran(CouleurParNom("white")); + dessinerGrille(etatJeu); + jouerModeHumain(&etatJeu); + besoinRedessiner = 1; + } else if (mouseY >= 320 && mouseY <= 370) { /* Si la souris est sur la case Quitter */ continuer = 0; } } @@ -94,6 +86,7 @@ void menuPrincipale() { } int main() { + srand(time(NULL)); menuPrincipale(); return 0; }