diff --git a/img/pomme1.png b/img/pomme1.png index 5d96e3f..51e3b41 100644 Binary files a/img/pomme1.png and b/img/pomme1.png differ diff --git a/include/menu.h b/include/menu.h index c5ddf0d..92a435c 100644 --- a/include/menu.h +++ b/include/menu.h @@ -1,7 +1,7 @@ #ifndef MENU_H #define MENU_H - +void afficherBouton(double x1, double y1, double x2, double y2, const char *texte, couleur arriere_plan, couleur bordure, couleur couleur_texte, int taille_texte); void afficherMenuPrincipal(void); void afficherMenuModesDeJeu(void); void afficherMenuGameOver(void); diff --git a/src/jeu.c b/src/jeu.c index d772842..fd04703 100644 --- a/src/jeu.c +++ b/src/jeu.c @@ -1,7 +1,7 @@ #include #include #include -#include +#include /* à supprimer prochainement */ #include "../include/grille.h" #include "../include/serpent.h" #include "../include/pomme.h" @@ -9,9 +9,21 @@ #include "../include/menu.h" +void afficherScore(int score) { + char scoreStr[20]; + /* Efface l'ancien score */ + ChoisirCouleurDessin(CouleurParComposante(0, 0, 0)); + RemplirRectangle(178, 946, 200, 40); + /* Convertit le score en chaîne de caractères */ + snprintf(scoreStr, sizeof(scoreStr), "%d", score); + /* Affiche le nouveau score */ + ChoisirCouleurDessin(CouleurParComposante(255, 255, 255)); + EcrireTexte(178, 976, scoreStr, 2); +} void lancer_jeu1(void) { + struct timespec delai = {0, 55000000}; /* A SUPPRIMER QUAND ON AURA LA FONCTION ATTENDRE*/ Segment serpent[100]; int longueur = 10; int direction_x = 1; @@ -51,21 +63,14 @@ void lancer_jeu1(void) { dessinerSerpent(serpent, &longueur); - /* Efface l'ancien score */ - ChoisirCouleurDessin(CouleurParComposante(0, 0, 0)); - RemplirRectangle(178, 946, 200, 40); - /* Convertit le score en chaîne de caractères */ - snprintf(scoreStr, sizeof(scoreStr), "%d", score); - /* Affiche le nouveau score */ - ChoisirCouleurDessin(CouleurParComposante(255, 255, 255)); - EcrireTexte(178, 976, scoreStr, 2); + afficherScore(score); - struct timespec delai = {0, 55000000}; /*50 000 000 nanosecondes (0.05 seconde)*/ nanosleep(&delai, NULL); } } void lancer_jeu2(void) { + struct timespec delai = {0, 55000000}; /*50 000 000 nanosecondes (0.05 seconde)*/ int i; Segment serpent[100]; int longueur = 10; @@ -110,16 +115,8 @@ void lancer_jeu2(void) { dessinerSerpent(serpent, &longueur); - /* Efface l'ancien score */ - ChoisirCouleurDessin(CouleurParComposante(0, 0, 0)); - RemplirRectangle(178, 946, 200, 40); - /* Convertit le score en chaîne de caractères */ - snprintf(scoreStr, sizeof(scoreStr), "%d", score); - /* Affiche le nouveau score */ - ChoisirCouleurDessin(CouleurParComposante(255, 255, 255)); - EcrireTexte(178, 976, scoreStr, 2); + afficherScore(score); - struct timespec delai = {0, 55000000}; /*50 000 000 nanosecondes (0.05 seconde)*/ nanosleep(&delai, NULL); } } @@ -166,21 +163,15 @@ void lancer_jeu3(void) { dessinerSerpent(serpent, &longueur); - /* Efface l'ancien score */ - ChoisirCouleurDessin(CouleurParComposante(0, 0, 0)); - RemplirRectangle(178, 946, 200, 40); - /* Convertit le score en chaîne de caractères */ - snprintf(scoreStr, sizeof(scoreStr), "%d", score); - /* Affiche le nouveau score */ - ChoisirCouleurDessin(CouleurParComposante(255, 255, 255)); - EcrireTexte(178, 976, scoreStr, 2); + afficherScore(score); + /*Permet de gérer la vitesse du serpent*/ nanosleep(&delai, NULL); } } void lancer_jeu4(void) { - struct timespec delai = {0, 30000000}; /*40 000 000 nanosecondes (0.04 seconde)*/ + struct timespec delai = {0, 28000000}; /*40 000 000 nanosecondes (0.04 seconde)*/ Segment serpent[100]; int longueur = 10; int direction_x = 1; @@ -220,15 +211,11 @@ void lancer_jeu4(void) { dessinerSerpent(serpent, &longueur); - /* Efface l'ancien score */ - ChoisirCouleurDessin(CouleurParComposante(0, 0, 0)); - RemplirRectangle(178, 946, 200, 40); - /* Convertit le score en chaîne de caractères */ - snprintf(scoreStr, sizeof(scoreStr), "%d", score); - /* Affiche le nouveau score */ - ChoisirCouleurDessin(CouleurParComposante(255, 255, 255)); - EcrireTexte(178, 976, scoreStr, 2); + afficherScore(score); + /*Permet de gérer la vitesse du serpent*/ nanosleep(&delai, NULL); } -} \ No newline at end of file +} + + diff --git a/src/menu.c b/src/menu.c index a710c23..0fef9e9 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1,58 +1,37 @@ -#include -#include -#include +#include +#include +#include +#include #include "../include/menu.h" #include "../include/main.h" -void afficherMenuPrincipal(){ + + +void afficherMenuPrincipal() { ChargerImageFond("../img/menu_principal.png"); - /*Affiche le bouton "Jouer"*/ - ChoisirCouleurDessin(CouleurParComposante(0,151,178)); - RemplirRectangle(67, 850, 300, 100); - ChoisirCouleurDessin(CouleurParNom("black")); - EcrireTexte(180, 910, "Jouer", 2); - - /*Affiche le bouton "Quitter"*/ - ChoisirCouleurDessin(CouleurParComposante(0,151,178)); - RemplirRectangle(800, 850, 300, 100); - ChoisirCouleurDessin(CouleurParNom("black")); - EcrireTexte(910, 910, "Quitter", 2); + /* Affiche le bouton "Jouer" */ + afficherBouton(67, 850, 367, 950, "Jouer", CouleurParComposante(0,151,178), CouleurParNom("black"), CouleurParNom("black"), 2); + /* Affiche le bouton "Quitter" */ + afficherBouton(800, 850, 1100, 950, "Quitter", CouleurParComposante(0,151,178), CouleurParNom("black"), CouleurParNom("black"), 2); } - -void afficherMenuModesDeJeu(){ - - /*Affiche l'image de fond des modes de jeu*/ +void afficherMenuModesDeJeu() { + /* Affiche l'image de fond des modes de jeu */ ChargerImageFond("../img/modes_de_jeu.png"); - /*Affiche le bouton n°1*/ - ChoisirCouleurDessin(CouleurParComposante(168,116,67)); - RemplirRectangle(38.7, 639.9, 241.6, 103); - ChoisirCouleurDessin(CouleurParNom("black")); - EcrireTexte(87.6, 700, "Classique", 2); - - /*Affiche le bouton n°2*/ - ChoisirCouleurDessin(CouleurParComposante(168,116,67)); - RemplirRectangle(332.6, 639.9, 241.6, 103); - ChoisirCouleurDessin(CouleurParNom("black")); - EcrireTexte(360.4, 700, "MultiPommes", 2); - - /*Affiche le bouton n°3*/ - ChoisirCouleurDessin(CouleurParComposante(168,116,67)); - RemplirRectangle(626.2, 639.9, 241.6, 103); - ChoisirCouleurDessin(CouleurParNom("black")); - EcrireTexte(700.1, 700, "Rapide", 2); - - /*Affiche le bouton n°4*/ - ChoisirCouleurDessin(CouleurParComposante(168,116,67)); - RemplirRectangle(919.7, 639.9, 241.6, 103); - ChoisirCouleurDessin(CouleurParNom("black")); - EcrireTexte(960.7, 700, "Ultra rapide", 2); + /* Affiche les boutons des modes de jeu */ + afficherBouton(38.7, 639.9, 280.3, 742.9, "Classique", CouleurParComposante(168, 116, 67), CouleurParNom("nom_de_la_couleur_bordure"), CouleurParNom("nom_de_la_couleur_texte"), 2); + afficherBouton(332.6, 639.9, 574.2, 742.9, "MultiPommes", CouleurParComposante(168, 116, 67), CouleurParNom("nom_de_la_couleur_bordure"), CouleurParNom("nom_de_la_couleur_texte"), 2); + afficherBouton(626.2, 639.9, 867.8, 742.9, "Rapide", CouleurParComposante(168, 116, 67), CouleurParNom("nom_de_la_couleur_bordure"), CouleurParNom("nom_de_la_couleur_texte"), 2); + afficherBouton(919.7, 639.9, 1161.3, 742.9, "Ultra rapide", CouleurParComposante(168, 116, 67), CouleurParNom("nom_de_la_couleur_bordure"), CouleurParNom("nom_de_la_couleur_texte"), 2); } + + + void afficherMenuGameOver(void) { /* Affiche l'image game over */ ChargerImageFond("../img/game_over.png"); @@ -134,3 +113,23 @@ int attendreChoixMenu(){ } } } + +void afficherBouton(double x1, double y1, double x2, double y2, const char *texte, couleur arriere_plan, couleur bordure, couleur couleur_texte, int taille_texte) { + /* Copie la chaîne constante dans une nouvelle chaîne non constante */ + char *texte_modifiable = strdup(texte); + + /* Affiche le bouton avec la couleur d'arrière-plan spécifiée */ + ChoisirCouleurDessin(arriere_plan); + RemplirRectangle(x1, y1, x2 - x1, y2 - y1); + + /* Affiche la bordure avec la couleur spécifiée */ + ChoisirCouleurDessin(bordure); + DessinerRectangle(x1, y1, x2 - x1, y2 - y1); + + /* Affiche le texte centré sur le bouton avec la couleur de texte spécifiée */ + ChoisirCouleurDessin(couleur_texte); + EcrireTexte((int)((x1 + x2) / 2 - TailleChaineEcran(texte_modifiable, taille_texte) / 2), (int)((y1 + y2) / 2 + TailleSupPolice(taille_texte) / 2), texte_modifiable, taille_texte); + + /* Libère la mémoire allouée pour la copie de la chaîne */ + free(texte_modifiable); +} \ No newline at end of file diff --git a/src/pomme.c b/src/pomme.c new file mode 100644 index 0000000..ce61496 --- /dev/null +++ b/src/pomme.c @@ -0,0 +1,34 @@ +#include +#include +#include "../include/grille.h" +#include "../include/serpent.h" + +typedef struct { + int x; + int y; +} Pomme; + +Pomme creerPomme() { + Pomme pomme; + pomme.x = rand() % 60; + pomme.y = rand() % 40; + return pomme; +} + +void dessinerPomme(Pomme pomme) { + /* Affichez une pomme*/ + int id_pomme; + id_pomme = ChargerSprite("../img/pomme1.png"); + AfficherSprite(id_pomme,pomme.x * TAILLE_CASE, pomme.y * TAILLE_CASE); +} + +int verifierCollisionPommeSerpent(Pomme pomme, Segment serpent[], int longueur) { + int i; + /*Vérifie si la pomme est sur une case occupée par le serpent*/ + for (i = 0; i < longueur; ++i) { + if (pomme.x == serpent[i].x && pomme.y == serpent[i].y) { + return 1; /* Collision */ + } + } + return 0; /* Pas de collision */ +}