diff --git a/GUI.c b/GUI.c new file mode 100644 index 0000000..5b10379 --- /dev/null +++ b/GUI.c @@ -0,0 +1,18 @@ +#include <stdlib.h> +#include <stdio.h> +#include <graph.h> + +int Menu() +{ + ChargerImage("./images/Menu.png",0,0,0,0,930,710); +} + +void Pause() +{ + ChargerImage("./images/Pause.png",0,0,0,0,930,710); +} + +void Reinitialiser() +{ + CopierZone(8,0,0,0,930,710,0,0); +} \ No newline at end of file diff --git a/GUI.h b/GUI.h new file mode 100644 index 0000000..e1d80f8 --- /dev/null +++ b/GUI.h @@ -0,0 +1,8 @@ +#ifndef GUI_H +#define GUI_H + +void Pause(); +void Reinitialiser(); +int AfficherGUI(unsigned char menu); + +#endif \ No newline at end of file diff --git a/Makefile b/Makefile index 0b30417..1747d20 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ CFLAGS = -Wall -Wextra all: prog -prog: main.o evenement.o +prog: main.o evenement.o GUI.o $(CC) -o $@ $^ -lgraph main.o: main.c evenement.h @@ -12,5 +12,8 @@ main.o: main.c evenement.h evenement.o: evenement.c evenement.h $(CC) $(CFLAGS) -c $< -o $@ +GUI.o: GUI.c GUI.h + $(CC) $(CFLAGS) -c $< -o $@ + clean: rm -f *.o prog diff --git a/evenement.c b/evenement.c index 5f69acf..2bc7c50 100644 --- a/evenement.c +++ b/evenement.c @@ -1,8 +1,9 @@ #include <graph.h> #include <stdio.h> #include <stdlib.h> +#include <time.h> #include "main.h" -#include <time.h> +#include "GUI.h" void AfficherTimerEtScore(long unsigned int *score, int minutes,int secondes) /*Afficher le temps passé et le score*/ { @@ -79,16 +80,10 @@ void DeplacementSerpent(int direction ,PIXELS *serpent, int longueur) bg=CouleurParComposante(171, 204, 104); ChoisirCouleurDessin(bg); - if(serpent[longueur-1].x > 900 || serpent[longueur-1].x < 0) - { - serpent[longueur-1].x = 30; - serpent[longueur-1].y = 710; /* Valeurs toujours de couleurs verte */ - } - RemplirRectangle(serpent[longueur-1].x,serpent[longueur-1].y,T_PIXEL,T_PIXEL); - - for (i = 1; i <= longueur; i++) { + for (i = 1; i <= longueur; i++) + { int tempX2 = serpent[i].x; int tempY2 = serpent[i].y; @@ -99,6 +94,7 @@ void DeplacementSerpent(int direction ,PIXELS *serpent, int longueur) tempY = tempY2; } + if(direction == 0) /* Direction vers la gauche */ { serpent[0].x-=T_PIXEL; @@ -119,4 +115,19 @@ void DeplacementSerpent(int direction ,PIXELS *serpent, int longueur) serpent[0].y+=T_PIXEL; ChargerImage("./images/SnakePart.png",serpent[0].x,serpent[0].y,0,0,T_PIXEL,T_PIXEL); } +} + +int Serpent(PIXELS *serpent,PIXELS *pastilles,unsigned long *score,int *longueur_serpent,unsigned long int *vitesse,int direction) +{ + if(MourrirSerpent(serpent,*longueur_serpent) == 1) + { + return 2; + } + DeplacementSerpent(direction,serpent,*longueur_serpent); + if(MangerPastille(serpent,pastilles,score,*longueur_serpent,vitesse) == 1) + { + *longueur_serpent+=2; + return 1; + } + return 0; } \ No newline at end of file diff --git a/evenement.h b/evenement.h index bedbe7d..3fbd7c7 100644 --- a/evenement.h +++ b/evenement.h @@ -15,5 +15,7 @@ int PastilleSurSerpent(PIXELS pastille, PIXELS *serpent, int longueur_serpent); int MourrirSerpent(PIXELS *serpent, int longueur_serpent); +int Serpent(PIXELS *serpent,PIXELS *pastilles,unsigned long *score,int *longueur_serpent,unsigned long int *vitesse,int direction); + #endif \ No newline at end of file diff --git a/images/Menu.png b/images/Menu.png new file mode 100644 index 0000000..2d2beb1 Binary files /dev/null and b/images/Menu.png differ diff --git a/images/PERDU.png b/images/PERDU.png new file mode 100644 index 0000000..e5cd2b4 Binary files /dev/null and b/images/PERDU.png differ diff --git a/images/Pause.png b/images/Pause.png new file mode 100644 index 0000000..99d037a Binary files /dev/null and b/images/Pause.png differ diff --git a/main.c b/main.c index 7ee2b68..d770ff0 100644 --- a/main.c +++ b/main.c @@ -4,6 +4,7 @@ #include <time.h> #include "evenement.h" #include "main.h" +#include "GUI.h" #define DELTA 100000L #define DELTA2 1000000L @@ -110,10 +111,12 @@ int main() unsigned long score = 0; unsigned long suivant; unsigned long suivant2; - int go_on=1; + int game_on=0; + int window_on=1; int secondes = 0; int minutes = 0; unsigned long int vitesse = DELTA; + int valeur_retourne = 0; size_t longueur_serpent = 10; size_t longueur_pastilles = PASTILLES; @@ -136,93 +139,112 @@ int main() CreerFenetre(10,10,W_WINDOW,H_WINDOW); /* Peut être changer cette ligne avec la fonction Maxx et Maxy fournie dans graph.h ??*/ ChoisirTitreFenetre("SNAKE SAE11 IN C"); DessinerScene(pastilles,serpent,longueur_serpent); - - while(go_on) /* Lancement du cycle pour les Inputs et le Jeu*/ - { - - - if (ToucheEnAttente() == 1) + while(window_on) + { + ChoisirEcran(0); + Menu(); + if (ToucheEnAttente() == 1) { switch (Touche()) { - case XK_Up: - direction = 1; - if(direction_davant == 3 && direction == 1) - { - direction = direction_davant; - } - break; - case XK_Down: - direction = 3; - if(direction_davant == 1 && direction == 3) - { - direction = direction_davant; /* Changements de direction du serpent*/ - } - break; - case XK_Left: - direction = 0; - if(direction_davant == 2 && direction == 0) - { - direction = direction_davant; - } - break; - case XK_Right: - direction = 2; - if(direction_davant == 0 && direction == 2) - { - direction = direction_davant; - } - break; - - case XK_space: - if(pause == 0) - { - pause = 1 ; - } /* Faire pause */ - else if(pause == 1) - { - pause = 0; - } - + case XK_space: + game_on=1; + DessinerScene(pastilles,serpent,longueur_serpent); + break; } } - else - { if(pause==0) + + while(game_on) /* Lancement du cycle pour les Inputs et le Jeu*/ + { + if (ToucheEnAttente() == 1) { - - if (Microsecondes()>suivant2) + switch (Touche()) { - secondes++; - if(secondes == 60) - { - minutes++; - secondes = 0; - } - suivant2=Microsecondes()+DELTA2; + case XK_Up: + direction = 1; + if(direction_davant == 3 && direction == 1) + { + direction = direction_davant; + } + break; + case XK_Down: + direction = 3; + if(direction_davant == 1 && direction == 3) + { + direction = direction_davant; /* Changements de direction du serpent*/ + } + break; + case XK_Left: + direction = 0; + if(direction_davant == 2 && direction == 0) + { + direction = direction_davant; + } + break; + case XK_Right: + direction = 2; + if(direction_davant == 0 && direction == 2) + { + direction = direction_davant; + } + break; + + case XK_space: + if(pause ==0) + { + pause=1; + break; + } + else if(pause == 1) + { + pause=0; + break; + } } - if (Microsecondes()>suivant) - { - suivant=Microsecondes()+vitesse; - AfficherTimerEtScore(&score,minutes,secondes); - direction_davant = direction; /* Check si le serpent à le droit de changer de direction */ - if(MourrirSerpent(serpent,longueur_serpent)) + if(pause==1) + { + ChoisirEcran(0); + Pause(); + } + + } + else + { if(pause==0) + { + + if (Microsecondes()>suivant2) { - FermerGraphique(); - free(serpent); - free(pastilles); - return EXIT_FAILURE; + secondes++; + if(secondes == 60) + { + minutes++; + secondes = 0; + } + suivant2=Microsecondes()+DELTA2; } - DeplacementSerpent(direction,serpent,longueur_serpent); - if(MangerPastille(serpent,pastilles,&score,longueur_serpent,&vitesse) == 1) - { - longueur_serpent+=2; - serpent = (PIXELS*) realloc(serpent,longueur_serpent * sizeof(PIXELS)); + + if (Microsecondes()>suivant) + { + suivant=Microsecondes()+vitesse; + AfficherTimerEtScore(&score,minutes,secondes); + direction_davant = direction; /* Check si le serpent à le droit de changer de direction */ + + valeur_retourne = Serpent(serpent,pastilles,&score,&longueur_serpent,&vitesse,direction); + if(valeur_retourne == 1) + { + serpent = (PIXELS*) realloc(serpent,longueur_serpent * sizeof(PIXELS)); + } + else if (valeur_retourne == 2) + { + game_on=0; + } } } } } } + FermerGraphique(); return EXIT_SUCCESS; } diff --git a/prog b/prog new file mode 100755 index 0000000..3ee3a30 Binary files /dev/null and b/prog differ