Files
DEV/SAE11_2024/graphique.c
EmmanuelTiamzon 2a4b74f54e update
2025-12-05 10:36:05 +01:00

236 lines
7.8 KiB
C

#include <stdlib.h>
#include <graph.h>
#include "graphique.h"
#include "jeu.h"
/* Afficher un pion */
void AfficherPion(int x, int y, int pion) {
AfficherSprite(pion, x, y);
}
//
/* Afficher une croix */
void AfficherCroix(int x, int y, int croix) {
AfficherSprite(croix, x, y);
}
/* Redessiner une case */
void RedessinerCase(int caseX, int caseY, int largeur_case, int offset_x, int offset_y) {
int x = offset_x + caseX * largeur_case;
int y = offset_y + caseY * largeur_case;
ChoisirCouleurDessin(CouleurParComposante(255, 255, 255));
RemplirRectangle(x, y, largeur_case, largeur_case);
ChoisirCouleurDessin(CouleurParComposante(0, 0, 0));
DessinerRectangle(x, y, largeur_case, largeur_case);
}
void MenuGraphique(int *taille_grille, int *nombre_joueurs) {
int i;
couleur grisClair = CouleurParComposante(255, 255, 255);
couleur noir = CouleurParComposante(0, 0, 0);
couleur orange = CouleurParComposante(250, 143, 2);
couleur cyan = CouleurParComposante(2, 183, 219);
int pion_bleu, pion_orange, croix_bleu, croix_orange; /* Déclarer les variables pour les sprites*/
EffacerEcran(grisClair);
Bouton boutonsGrille[] = {
{150, 70, 70, 50, "3x3", noir}, {250, 70, 70, 50, "4x4", noir},
{350, 70, 70, 50, "5x5", noir}, {450, 70, 70, 50, "6x6", noir},
{550, 70, 70, 50, "7x7", noir}, {650, 70, 70, 50, "8x8", noir},
{750, 70, 70, 50, "9x9", noir}
};
Bouton bouton1J = {440, 240, 50, 50, "IA", cyan};
Bouton bouton2J = {520, 240, 50, 50, "2J", orange};
Bouton confirmer = {430, 400, 120, 50, "Confirmer?", noir};
EcrireTexte(300, 50, "Veuillez choisir la taille de la grille : ", 1);
for (i = 0; i < 7; i++) {
DessinerBouton(boutonsGrille[i]);
}
EcrireTexte(230, 200, "Voulez-vous demarrer une partie a un ou deux joueurs?", 1);
DessinerBouton(bouton1J);
DessinerBouton(bouton2J);
int choix_grille_precedent = -1;
int choix_mode_precedent = -1;
while (1) {
if (SourisCliquee()) {
SourisPosition();
int x = _X, y = _Y;
for (i = 0; i < 7; i++) {
if (EstClique(boutonsGrille[i], x, y)) {
*taille_grille = i + 3;
if (choix_grille_precedent != -1) {
Bouton bouton_precedent = boutonsGrille[choix_grille_precedent];
ChoisirCouleurDessin(grisClair);
RemplirRectangle(bouton_precedent.x, bouton_precedent.y, bouton_precedent.largeur, bouton_precedent.hauteur);
DessinerBouton(bouton_precedent);
}
ChoisirCouleurDessin(noir);
RemplirRectangle(boutonsGrille[i].x, boutonsGrille[i].y, boutonsGrille[i].largeur, boutonsGrille[i].hauteur);
DessinerBouton(boutonsGrille[i]);
choix_grille_precedent = i;
EcrireTexte(360, 330, "Taille de grille selectionnee", 1);
break;
}
}
if (EstClique(bouton1J, x, y)) {
*nombre_joueurs = 1;
ChoisirCouleurDessin(grisClair);
RemplirRectangle(340, 350, 200, 40);
if (choix_mode_precedent == 2) {
ChoisirCouleurDessin(grisClair);
RemplirRectangle(bouton2J.x, bouton2J.y, bouton2J.largeur, bouton2J.hauteur);
DessinerBouton(bouton2J);
}
ChoisirCouleurDessin(cyan);
RemplirRectangle(bouton1J.x, bouton1J.y, bouton1J.largeur, bouton1J.hauteur);
DessinerBouton(bouton1J);
choix_mode_precedent = 1;
EcrireTexte(360, 370, "Mode 1 joueur selectionne", 1);
} else if (EstClique(bouton2J, x, y)) {
*nombre_joueurs = 2;
ChoisirCouleurDessin(grisClair);
RemplirRectangle(340, 350, 200, 40);
if (choix_mode_precedent == 1) {
ChoisirCouleurDessin(grisClair);
RemplirRectangle(bouton1J.x, bouton1J.y, bouton1J.largeur, bouton1J.hauteur);
DessinerBouton(bouton1J);
}
ChoisirCouleurDessin(orange);
RemplirRectangle(bouton2J.x, bouton2J.y, bouton2J.largeur, bouton2J.hauteur);
DessinerBouton(bouton2J);
choix_mode_precedent = 2;
EcrireTexte(360, 370, "Mode 2 joueur selectionne", 1);
}
if (*taille_grille > 0 && *nombre_joueurs > 0) {
DessinerBouton(confirmer);
if (EstClique(confirmer, x, y)) {
return;
}
}
}
}
}
/* Fonction pour réinitialiser la grille */
void ReinitialiserGrille(int grille[][9], int taille_grille) {
int i, j;
for (i = 0; i < taille_grille; i++) {
for (j = 0; j < taille_grille; j++) {
grille[i][j] = 0;
}
}
}
/* Menu de fin */
void MenuFin(int gagnant, int grille[][9], int taille_grille, int pion_bleu, int pion_orange,
int croix_bleu, int croix_orange) {
int x, y;
EffacerEcran(CouleurParComposante(255, 255, 255));
/* Affichage du message de fin */
if (gagnant == 1) {
ChoisirCouleurDessin(CouleurParComposante(2, 183, 219));
EcrireTexte(400, 300, "Le joueur bleu a gagne !", 1);
ChoisirCouleurDessin(CouleurParComposante(250, 143, 2));
EcrireTexte(400, 350, "Le joueur orange a perdu.", 1);
} else if (gagnant == 2) {
ChoisirCouleurDessin(CouleurParComposante(250, 143, 2));
EcrireTexte(400, 300, "Le joueur orange a gagne !", 1);
ChoisirCouleurDessin(CouleurParComposante(2, 183, 219));
EcrireTexte(400, 350, "Le joueur bleu a perdu.", 1);
}
/* Définition des boutons */
Bouton quitter = {430, 380, 120, 40, "Quitter ?"};
Bouton recommencer = {410, 460, 160, 40, "Recommencer ?"};
/* Dessiner les boutons */
DessinerBouton(quitter);
DessinerBouton(recommencer);
while (1) {
if (SourisCliquee()) {
SourisPosition();
x = _X;
y = _Y;
/* Vérifier si le clic est sur le bouton "Quitter" */
if (EstClique(quitter, x, y)) {
FermerGraphique();
return;
}
/* Vérifier si le clic est sur le bouton "Recommencer" */
else if (EstClique(recommencer, x, y)) {
int taille_grille = 0;
int nombre_joueurs = 0;
debutJeu(grille, taille_grille, nombre_joueurs, pion_bleu, pion_orange, croix_bleu, croix_orange);
/* Réinitialiser la grille */
ReinitialiserGrille(grille, taille_grille);
/* Relancer le jeu */
debutJeu(grille, taille_grille,nombre_joueurs, pion_bleu, pion_orange, croix_bleu, croix_orange);
return;
}
}
}
}
/* Dessiner un bouton */
void DessinerBouton(Bouton bouton) {
ChoisirCouleurDessin(bouton.couleurTexte);
DessinerRectangle(bouton.x, bouton.y, bouton.largeur, bouton.hauteur);
EcrireTexte(bouton.x + 10, bouton.y + bouton.hauteur / 2 + 5, bouton.texte, 1);
}
/* Vérifier si un bouton a été cliqué */
int EstClique(Bouton bouton, int x, int y) {
return (x >= bouton.x && x <= bouton.x + bouton.largeur && y >= bouton.y && y <= bouton.y + bouton.hauteur);
}
/* Afficher la grille */
void AfficherGrille(int taille_grille, int largeur_case, int offset_x, int offset_y) {
int i, j;
for (i = 0; i < taille_grille; i++) {
for (j = 0; j < taille_grille; j++) {
int x = offset_x + j * largeur_case;
int y = offset_y + i * largeur_case;
DessinerRectangle(x, y, largeur_case, largeur_case);
}
}
}