From 0f9fa80b995ccf733aeefbe12d4f2a842c81d708 Mon Sep 17 00:00:00 2001 From: torreblam Date: Mon, 18 Nov 2024 13:30:20 +0100 Subject: [PATCH] =?UTF-8?q?Impl=C3=A9mentation=20du=20mode=202=20joueurs?= =?UTF-8?q?=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 */