From f0991b0f647dfb0b01d5dc0946685101583b4aae Mon Sep 17 00:00:00 2001 From: Haffa Bakhouche Date: Mon, 18 Nov 2024 07:28:15 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20des=20fonctions=20initialiserJeu=20pour?= =?UTF-8?q?=20setup=20la=20grille,=20dessinerGrille(avec=20affichage=20des?= =?UTF-8?q?=20phases),=20detection=20des=20cases=20adjacentes/autoris?= =?UTF-8?q?=C3=A9es/non-autoris=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jeu.c | 223 +++++++++++++++++++++------------------------------------- 1 file changed, 82 insertions(+), 141 deletions(-) diff --git a/jeu.c b/jeu.c index 7aa1435..f352020 100755 --- a/jeu.c +++ b/jeu.c @@ -1,10 +1,57 @@ #include #include -#include "jeu.h" +#include #include +#include "jeu.h" -void DessinerCercle(int x, int y, int rayon) { - DessinerArc(x - rayon, y - rayon, 2 * rayon, 2 * rayon, 0, 360); +struct EtatJeu initialiserJeu(int tailleGrille, int mode) { + struct EtatJeu etat; + int i; + + etat.tailleGrille = tailleGrille; + etat.mode = mode; + etat.tourJoueur = 1; + etat.phase = 0; + etat.joueur1.x = -1; + etat.joueur1.y = -1; + etat.joueur2.x = -1; + etat.joueur2.y = -1; + + etat.grille = malloc(tailleGrille * sizeof(int*)); + for(i = 0; i < tailleGrille; i++) { + etat.grille[i] = malloc(tailleGrille * sizeof(int)); + memset(etat.grille[i], 0, tailleGrille * sizeof(int)); + } + + return etat; +} + +int estCaseAdjacente(struct Position pos1, struct Position pos2) { + return abs(pos1.x - pos2.x) <= 1 && abs(pos1.y - pos2.y) <= 1; +} + +int peutDeplacer(struct EtatJeu etatJeu, int joueur) { + struct Position pos; + int i, j; + int newX, newY; + + pos = joueur == 1 ? etatJeu.joueur1 : etatJeu.joueur2; + + for(i = -1; i <= 1; i++) { + for(j = -1; j <= 1; j++) { + if(i == 0 && j == 0) continue; + + newX = pos.x + i; + newY = pos.y + j; + + if(newX >= 0 && newX < etatJeu.tailleGrille && + newY >= 0 && newY < etatJeu.tailleGrille && + etatJeu.grille[newY][newX] == 0) { + return 1; + } + } + } + return 0; } void dessinerGrille(struct EtatJeu etatJeu) { @@ -12,29 +59,29 @@ void dessinerGrille(struct EtatJeu etatJeu) { int largeurFenetre = 800; int hauteurFenetre = 600; int marge = 50; + int tailleCase; + int startX, startY; + char message[100]; EffacerEcran(CouleurParNom("white")); - ChoisirCouleurDessin(CouleurParNom("black")); - char message[50]; - sprintf(message, "Tour du Joueur %d", etatJeu.tourJoueur); - EcrireTexte(300, 30, message, 2); - if (etatJeu.tourJoueur == 1) { - ChoisirCouleurDessin(CouleurParNom("blue")); - EcrireTexte(500, 30, "(Bleu)", 2); + 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); } else { - ChoisirCouleurDessin(CouleurParNom("red")); - EcrireTexte(500, 30, "(Rouge)", 2); + sprintf(message, "Joueur %d : Bloquez une case", etatJeu.tourJoueur); } + EcrireTexte(200, 30, message, 2); - int tailleCase = (largeurFenetre - 2 * marge) / etatJeu.tailleGrille; + 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; for (i = 0; i < etatJeu.tailleGrille; i++) { for (j = 0; j < etatJeu.tailleGrille; j++) { @@ -50,140 +97,34 @@ void dessinerGrille(struct EtatJeu etatJeu) { } else if (etatJeu.grille[i][j] == 2) { ChoisirCouleurDessin(CouleurParNom("red")); RemplirRectangle(x + 5, y + 5, tailleCase - 10, tailleCase - 10); + } else if (etatJeu.grille[i][j] == 3) { + ChoisirCouleurDessin(CouleurParNom("black")); + RemplirRectangle(x + 5, y + 5, tailleCase - 10, tailleCase - 10); } } } } -void gererClicSouris(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; - - dessinerGrille(*etatJeu); - } -} - -struct EtatJeu initialiserJeu(int tailleGrille, int mode) { - struct EtatJeu etatJeu; - int i, j; - - etatJeu.tailleGrille = tailleGrille; - etatJeu.mode = mode; - etatJeu.tourJoueur = 1; - etatJeu.phase = 0; - - etatJeu.grille = (int**)malloc(tailleGrille * sizeof(int*)); - for (i = 0; i < tailleGrille; i++) { - etatJeu.grille[i] = (int*)malloc(tailleGrille * sizeof(int)); - for (j = 0; j < tailleGrille; j++) { - etatJeu.grille[i][j] = 0; - } - } - - return etatJeu; -} - -int verifierVictoire(struct EtatJeu etatJeu) { - int i, j; - - for (i = 0; i < etatJeu.tailleGrille; i++) { - 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; -} - void afficherVictoire(int gagnant) { - char message[50]; - sprintf(message, "Le Joueur %d a gagné !", gagnant); + char message[100]; - /* Rectangle blanc pour le message */ - ChoisirCouleurDessin(CouleurParNom("white")); - RemplirRectangle(200, 200, 400, 150); - - /* Bordure du rectangle */ + EffacerEcran(CouleurParNom("white")); ChoisirCouleurDessin(CouleurParNom("black")); - DessinerRectangle(200, 200, 400, 150); - /* Message de victoire */ - ChoisirCouleurDessin(gagnant == 1 ? CouleurParNom("blue") : CouleurParNom("red")); - EcrireTexte(250, 250, message, 2); + sprintf(message, "Le joueur %d a gagné !", gagnant); + EcrireTexte(250, 300, message, 2); - /* Instructions */ - ChoisirCouleurDessin(CouleurParNom("black")); - EcrireTexte(220, 300, "Cliquez pour revenir au menu", 1); - - printf("Partie terminée ! Le joueur %d a gagné !\n", gagnant); + EcrireTexte(200, 400, "Cliquez pour retourner au menu", 1); +} + +int verifierVictoire(struct EtatJeu etatJeu) { + if (etatJeu.phase == 0) { + return 0; + } + + if (!peutDeplacer(etatJeu, etatJeu.tourJoueur)) { + return etatJeu.tourJoueur == 1 ? 2 : 1; + } + + return 0; }