#include #include #include "jeu.h" #include void DessinerCercle(int x, int y, int rayon) { DessinerArc(x - rayon, y - rayon, 2 * rayon, 2 * rayon, 0, 360); } void dessinerGrille(struct EtatJeu etatJeu) { int i, j; int largeurFenetre = 800; int hauteurFenetre = 600; int marge = 50; /* Effacer l'écran avant tout dessin */ EffacerEcran(CouleurParNom("white")); /* Afficher le tour du joueur actuel */ ChoisirCouleurDessin(CouleurParNom("black")); char message[50]; sprintf(message, "Tour du Joueur %d", etatJeu.tourJoueur); EcrireTexte(300, 30, message, 2); /* Afficher la couleur du joueur */ if (etatJeu.tourJoueur == 1) { ChoisirCouleurDessin(CouleurParNom("blue")); EcrireTexte(500, 30, "(Bleu)", 2); } else { ChoisirCouleurDessin(CouleurParNom("red")); EcrireTexte(500, 30, "(Rouge)", 2); } /* Le reste du code de dessin de la grille reste identique */ 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; EffacerEcran(CouleurParNom("white")); for (i = 0; i < etatJeu.tailleGrille; i++) { for (j = 0; j < etatJeu.tailleGrille; j++) { int x = startX + (j * tailleCase); int y = startY + (i * tailleCase); ChoisirCouleurDessin(CouleurParNom("black")); DessinerRectangle(x, y, tailleCase, tailleCase); if (etatJeu.grille[i][j] == 1) { ChoisirCouleurDessin(CouleurParNom("blue")); RemplirRectangle(x + 5, y + 5, tailleCase - 10, tailleCase - 10); } else if (etatJeu.grille[i][j] == 2) { ChoisirCouleurDessin(CouleurParNom("red")); 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; EffacerEcran(CouleurParNom("white")); 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); /* Rectangle blanc pour le message */ ChoisirCouleurDessin(CouleurParNom("white")); RemplirRectangle(200, 200, 400, 150); /* Bordure du rectangle */ ChoisirCouleurDessin(CouleurParNom("black")); DessinerRectangle(200, 200, 400, 150); /* Message de victoire */ ChoisirCouleurDessin(gagnant == 1 ? CouleurParNom("blue") : CouleurParNom("red")); EcrireTexte(250, 250, 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); }