diff --git a/jeu.c b/jeu.c index d24284b..144e9d3 100755 --- a/jeu.c +++ b/jeu.c @@ -3,29 +3,66 @@ #include "jeu.h" #include /* Assurez-vous d'inclure la bibliothèque graphique */ +/* Fonction pour dessiner un cercle */ +void DessinerCercle(int x, int y, int rayon) { + DessinerArc(x - rayon, y - rayon, 2 * rayon, 2 * rayon, 0, 360); +} + /* Fonction pour dessiner la grille */ void dessinerGrille(struct EtatJeu etatJeu) { int i, j; int largeurFenetre = 800; /* Largeur de la fenêtre */ int hauteurFenetre = 600; /* Hauteur de la fenêtre */ - int tailleCase = largeurFenetre / etatJeu.tailleGrille; /* Taille de chaque case en fonction de la largeur de la fenêtre */ + + /* Calculer la taille de chaque case pour remplir complètement la fenêtre */ + int tailleCase = (largeurFenetre < hauteurFenetre) ? (largeurFenetre / etatJeu.tailleGrille) : (hauteurFenetre / etatJeu.tailleGrille); /* Ajuster la taille de la case pour qu'elle prenne tout l'espace */ - if (tailleCase > hauteurFenetre / etatJeu.tailleGrille) { - tailleCase = hauteurFenetre / etatJeu.tailleGrille; /* Ajuster si la hauteur est plus restrictive */ + if (tailleCase * etatJeu.tailleGrille > hauteurFenetre) { + tailleCase = hauteurFenetre / etatJeu.tailleGrille; } + /* Dessiner la grille */ for (i = 0; i < etatJeu.tailleGrille; i++) { for (j = 0; j < etatJeu.tailleGrille; j++) { int x = j * tailleCase; /* Calculer la position x */ int y = i * tailleCase; /* Calculer la position y */ ChoisirCouleurDessin(CouleurParNom("black")); /* Couleur de la grille */ DessinerRectangle(x, y, tailleCase, tailleCase); /* Dessiner le rectangle pour la case */ - /* Vous pouvez ajouter ici du code pour dessiner des éléments spécifiques dans chaque case */ + + /* Dessiner les pièces bloquées */ + if (etatJeu.grille[i][j] == 1) { /* 1 pour l'humain */ + ChoisirCouleurDessin(CouleurParNom("blue")); + DessinerCercle(x + tailleCase / 2, y + tailleCase / 2, tailleCase / 4); /* Dessiner un cercle bleu */ + } else if (etatJeu.grille[i][j] == 2) { /* 2 pour l'IA */ + ChoisirCouleurDessin(CouleurParNom("red")); + DessinerCercle(x + tailleCase / 2, y + tailleCase / 2, tailleCase / 4); /* Dessiner un cercle rouge */ + } } } } +void gererClicSouris(struct EtatJeu *etatJeu) { + int x, y; + int tailleCase; + int i, j; + + if (SourisCliquee()) { + x = _X; /* Position X du clic */ + y = _Y; /* Position Y du clic */ + + tailleCase = 800 / etatJeu->tailleGrille; /* Taille de chaque case */ + i = y / tailleCase; /* Ligne cliquée */ + j = x / tailleCase; /* Colonne cliquée */ + + /* Vérifier si la case est libre */ + if (i < etatJeu->tailleGrille && j < etatJeu->tailleGrille && etatJeu->grille[i][j] == 0) { + etatJeu->grille[i][j] = 1; /* Marquer la case comme bloquée par l'humain */ + dessinerGrille(*etatJeu); /* Redessiner la grille */ + jouerAvecIA(*etatJeu); /* Appeler la fonction de l'IA pour bloquer une case */ + } + } +} /* Fonction pour initialiser l'état du jeu */ struct EtatJeu initialiserJeu(int tailleGrille, int mode) { struct EtatJeu etatJeu; @@ -67,24 +104,16 @@ struct EtatJeu initialiserJeu(int tailleGrille, int mode) { /* Fonction pour jouer avec l'IA */ void jouerAvecIA(struct EtatJeu etatJeu) { - /* Créer une nouvelle fenêtre pour le jeu */ - CreerFenetre(100, 100, 800, 600); /* Créer la fenêtre */ - ChoisirTitreFenetre("Jeu Blocus - IA"); /* Choisir le titre de la fenêtre */ - - /* Logique de jeu avec l'IA ici */ - /* Par exemple, afficher la grille et gérer les tours */ - printf("Début du jeu avec l'IA...\n"); - - /* Dessiner la grille */ - dessinerGrille(etatJeu); - - /* Ajoutez ici la logique pour gérer les tours de jeu, etc. */ - - /* Attendre que l'utilisateur ferme la fenêtre */ - while (!SourisCliquee()) { - /* Vous pouvez ajouter ici une logique pour mettre à jour l'affichage si nécessaire */ + int i, j; + /* Logique simple pour que l'IA bloque une case */ + for (i = 0; i < etatJeu.tailleGrille; i++) { + for (j = 0; j < etatJeu.tailleGrille; j++) { + if (etatJeu.grille[i][j] == 0) { /* Trouver une case libre */ + etatJeu.grille[i][j] = 2; /* Marquer la case comme bloquée par l'IA */ + dessinerGrille(etatJeu); /* Redessiner la grille */ + return; /* Sortir après avoir bloqué une case */ + } + } } - - FermerGraphique(); /* Fermer la fenêtre graphique lorsque l'utilisateur clique */ } -/* Ajouter d'autres fonctions de logique de jeu si nécessaire */ \ No newline at end of file +/* Ajouter d'autres fonctions de logique de jeu si nécessaire */ diff --git a/jeu.h b/jeu.h index 8c90cf5..92aaff8 100644 --- a/jeu.h +++ b/jeu.h @@ -24,5 +24,6 @@ struct EtatJeu initialiserJeu(int tailleGrille, int mode); void jouerAvecIA(struct EtatJeu etatJeu); /* Ajouter d'autres prototypes de fonction liés à la logique du jeu */ +void gererClicSouris(struct EtatJeu *etatJeu); #endif /* JEU_H */ \ No newline at end of file diff --git a/main.c b/main.c index be08002..7b21d67 100755 --- a/main.c +++ b/main.c @@ -64,6 +64,7 @@ void menuPrincipale() { /* Boucle pour garder la fenêtre ouverte */ while (!SourisCliquee()) { + gererClicSouris(&etatJeu); /* Gérer les clics de souris */ usleep(10000); /* Attendre un court instant */ } continuer = 0; /* Sortir du menu */ @@ -81,6 +82,7 @@ void menuPrincipale() { FermerGraphique(); /* Fermer la graphique */ } + int main() { menuPrincipale(); /* Appeler la fonction du menu principal */ return 0; /* Retourner 0 pour indiquer que le programme s'est terminé avec succès */