From cf2d6860cf821a96b007370ac81436dde52b3b9d Mon Sep 17 00:00:00 2001 From: Haffa Bakhouche Date: Sun, 17 Nov 2024 03:05:19 +0100 Subject: [PATCH] =?UTF-8?q?S=C3=A9paration=20des=20modes=20de=20jeu=20en?= =?UTF-8?q?=20plusieurs=20fichiers,=20plus=20facile=20=C3=A0=20manipuler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- blocus | Bin 20696 -> 20992 bytes jeu.h | 11 ++----- jeu_humain.c | 58 +++++++++++++++++++++++++++++++++++ jeu_humain.h | 9 ++++++ jeu_ia.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++ jeu_ia.h | 10 ++++++ 6 files changed, 164 insertions(+), 9 deletions(-) create mode 100644 jeu_humain.c create mode 100644 jeu_humain.h create mode 100644 jeu_ia.c create mode 100644 jeu_ia.h diff --git a/blocus b/blocus index 8af1bfdd4fbbb83b971156a168456267fea2394f..c781f85d759cd0a12f5a7546f17fb559e0c80664 100755 GIT binary patch delta 7145 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 diff --git a/jeu.h b/jeu.h index 3a3398a..75ea664 100644 --- a/jeu.h +++ b/jeu.h @@ -1,24 +1,17 @@ #ifndef JEU_H -#define JEU_H +#define JEH_H struct EtatJeu { int tailleGrille; int mode; int tourJoueur; int phase; - int positionSourisJoueur1x; - int positionSourisJoueur1y; - int positionSourisJoueur2x; - int positionSourisJoueur2y; int** grille; }; struct EtatJeu initialiserJeu(int tailleGrille, int mode); -void jouerAvecIA(struct EtatJeu etatJeu); -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 +#endif \ No newline at end of file diff --git a/jeu_humain.c b/jeu_humain.c new file mode 100644 index 0000000..fc38cc3 --- /dev/null +++ b/jeu_humain.c @@ -0,0 +1,58 @@ +#include +#include +#include +#include +#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); + + int gagnant = verifierVictoire(*etatJeu); + if (gagnant != 0) { + afficherVictoire(gagnant); + printf("En attente d'un clic pour retourner au menu...\n"); + while (!SourisCliquee()) { + usleep(100000); + } + break; + } + } + usleep(20000); + } +} + +void gererClicHumain(struct EtatJeu *etatJeu) { + 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; + + x -= startX; + y -= startY; + + int i = y / tailleCase; + int 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; + + EffacerEcran(CouleurParNom("white")); + dessinerGrille(*etatJeu); + } +} diff --git a/jeu_humain.h b/jeu_humain.h new file mode 100644 index 0000000..f70c92f --- /dev/null +++ b/jeu_humain.h @@ -0,0 +1,9 @@ +#ifndef JEU_HUMAIN_H +#define JEU_HUMAIN_H + +#include "jeu.h" + +void jouerModeHumain(struct EtatJeu *etatJeu); +void gererClicHumain(struct EtatJeu *etatJeu); + +#endif diff --git a/jeu_ia.c b/jeu_ia.c new file mode 100644 index 0000000..28e5cb6 --- /dev/null +++ b/jeu_ia.c @@ -0,0 +1,85 @@ +#include +#include +#include +#include +#include "jeu_ia.h" + +void jouerModeIA(struct EtatJeu *etatJeu) { + while (1) { + if (etatJeu->tourJoueur == 1) { + if (SourisCliquee()) { + printf("Clic détecté sur la grille à : (%d, %d)\n", _X, _Y); + gererClicIA(etatJeu); + + int gagnant = verifierVictoire(*etatJeu); + if (gagnant != 0) { + afficherVictoire(gagnant); + while (!SourisCliquee()) { + usleep(100000); + } + break; + } + } + } else { + usleep(500000); + jouerCoupIA(etatJeu); + + int gagnant = verifierVictoire(*etatJeu); + if (gagnant != 0) { + afficherVictoire(gagnant); + while (!SourisCliquee()) { + usleep(100000); + } + break; + } + } + usleep(20000); + } +} + +void gererClicIA(struct EtatJeu *etatJeu) { + 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; + + x -= startX; + y -= startY; + + int i = y / tailleCase; + int 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 = 2; + + EffacerEcran(CouleurParNom("white")); + dessinerGrille(*etatJeu); + } +} + +void jouerCoupIA(struct EtatJeu *etatJeu) { + int i, j; + do { + i = rand() % etatJeu->tailleGrille; + j = rand() % etatJeu->tailleGrille; + } while (etatJeu->grille[i][j] != 0); + + etatJeu->grille[i][j] = 2; + etatJeu->tourJoueur = 1; + + EffacerEcran(CouleurParNom("white")); + dessinerGrille(*etatJeu); +} diff --git a/jeu_ia.h b/jeu_ia.h new file mode 100644 index 0000000..b331105 --- /dev/null +++ b/jeu_ia.h @@ -0,0 +1,10 @@ +#ifndef JEU_IA_H +#define JEU_IA_H + +#include "jeu.h" + +void jouerModeIA(struct EtatJeu *etatJeu); +void gererClicIA(struct EtatJeu *etatJeu); +void jouerCoupIA(struct EtatJeu *etatJeu); + +#endif