From 0f9fa80b995ccf733aeefbe12d4f2a842c81d708 Mon Sep 17 00:00:00 2001 From: torreblam Date: Mon, 18 Nov 2024 13:30:20 +0100 Subject: [PATCH 1/2] =?UTF-8?q?Impl=C3=A9mentation=20du=20mode=202=20joueu?= =?UTF-8?q?rs=20(Ajout=20syst=C3=A8me=20blocage=20des=20cases)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jeu_humain.c | 109 +++++++++++++++++++++++++++++++++++++++++++-------- jeu_humain.h | 9 +++-- 2 files changed, 98 insertions(+), 20 deletions(-) diff --git a/jeu_humain.c b/jeu_humain.c index fc38cc3..b0ca69a 100644 --- a/jeu_humain.c +++ b/jeu_humain.c @@ -2,18 +2,20 @@ #include #include #include +#include "jeu.h" #include "jeu_humain.h" 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 +26,110 @@ void jouerModeHumain(struct EtatJeu *etatJeu) { } } -void gererClicHumain(struct EtatJeu *etatJeu) { - int x = _X; - int y = _Y; +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); } } + +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..47c8e49 100644 --- a/jeu_humain.h +++ b/jeu_humain.h @@ -1,9 +1,10 @@ -#ifndef JEU_HUMAIN_H -#define JEU_HUMAIN_H +#ifndef JEU_HUMAIN_H_INCLUS +#define JEU_HUMAIN_H_INCLUS #include "jeu.h" void jouerModeHumain(struct EtatJeu *etatJeu); -void gererClicHumain(struct EtatJeu *etatJeu); +void gererPlacementInitial(struct EtatJeu *etatJeu); +void gererTourJoueur(struct EtatJeu *etatJeu); -#endif +#endif /* JEU_HUMAIN_H_INCLUS */ From 4c6d8c8063a6682a5fc2e498b8c59bc01e0daf99 Mon Sep 17 00:00:00 2001 From: torreblam Date: Mon, 18 Nov 2024 13:31:45 +0100 Subject: [PATCH 2/2] Menu principal --- main.c | 43 ++++++++++++++++++------------------------- 1 file changed, 18 insertions(+), 25 deletions(-) mode change 100755 => 100644 main.c diff --git a/main.c b/main.c old mode 100755 new mode 100644 index fdd9555..fa66fbc --- 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; @@ -15,36 +17,38 @@ void menuPrincipale() { ChoisirTitreFenetre("Blocus"); while (continuer) { - if (besoinRedessiner) { + 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; + besoinRedessiner = 0; } if (SourisCliquee()) { 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 (tailleGrille < 9) { @@ -58,30 +62,18 @@ void menuPrincipale() { } } else if (mouseX >= 250 && mouseX <= 550) { 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); - } + jouerModeIA(&etatJeu); + besoinRedessiner = 1; + } else if (mouseY >= 250 && mouseY <= 300) { + etatJeu = initialiserJeu(tailleGrille, 2); + EffacerEcran(CouleurParNom("white")); + dessinerGrille(etatJeu); + jouerModeHumain(&etatJeu); + besoinRedessiner = 1; } else if (mouseY >= 320 && mouseY <= 370) { continuer = 0; } @@ -94,6 +86,7 @@ void menuPrincipale() { } int main() { + srand(time(NULL)); menuPrincipale(); return 0; }