diff --git a/Snake/Afficher.c b/Snake/Afficher.c index a66ebf4..faa4708 100644 --- a/Snake/Afficher.c +++ b/Snake/Afficher.c @@ -29,11 +29,17 @@ void AfficheTab(int tab[H][L], int posx, int posy, int i, int j){ RemplirArc(posx+5,posy+5,10,10,360,360); } if(tab[i][j]==30){ + c=CouleurParNom("black"); + ChoisirCouleurDessin(c); + RemplirRectangle(posx,posy,20,20); c=CouleurParNom("red"); ChoisirCouleurDessin(c); RemplirArc(posx,posy,20,20,360,360); } - if(tab[i][j]==50){ + if(tab[i][j]==50){ + c=CouleurParNom("black"); + ChoisirCouleurDessin(c); + RemplirRectangle(posx,posy,20,20); c=CouleurParNom("purple"); ChoisirCouleurDessin(c); RemplirArc(posx,posy,20,20,360,360); diff --git a/Snake/Afficher.o b/Snake/Afficher.o new file mode 100644 index 0000000..2ab848c Binary files /dev/null and b/Snake/Afficher.o differ diff --git a/Snake/Chemin.c b/Snake/Chemin.c index e97a6ff..1170877 100644 --- a/Snake/Chemin.c +++ b/Snake/Chemin.c @@ -49,6 +49,19 @@ int VerifChemin(int tab[H][L], int x, int y){ } } +/*Verification sir le joueuer a gagner ou perdu*/ +int Gagne(int tab[H][L]){ + int i,j; + for(i=0;i<=H;i++){ + for(j=0;j<=L;j++){ + if(tab[i][j]==0||tab[i][j]==30||tab[i][j]==30){ + return 1; + } + } + } + return 0; +} + /*regarde la case ou la queue est pour savoir ou elle va aller ensuite*/ int VoirCase(int tab[H][L],int x, int y,int defaut){ if(tab[x][y]==9){ diff --git a/Snake/Chemin.h b/Snake/Chemin.h index 3c95c71..66faedb 100644 --- a/Snake/Chemin.h +++ b/Snake/Chemin.h @@ -15,5 +15,6 @@ int Semage(int tab[H][L], int direction, int sxmax, int symax, int *pause, int * unsigned long TempsArret(int *temoin); int VerifChemin(int tab[H][L], int x, int y); int VoirCase(int tab[H][L], int x, int y, int defaut); +int Gagne(int tab[H][L]); #endif // CHEMIN_H diff --git a/Snake/Chemin.o b/Snake/Chemin.o new file mode 100644 index 0000000..0482372 Binary files /dev/null and b/Snake/Chemin.o differ diff --git a/Snake/Deplacement.c b/Snake/Deplacement.c index eae84da..a70ab1e 100644 --- a/Snake/Deplacement.c +++ b/Snake/Deplacement.c @@ -2,6 +2,9 @@ #include #include #include +#include "Chemin.h" +#include "Afficher.h" +#include "ModifTab.h" /*verifie les touches cliquée par le joueur*/ int CliqueTouche(int defaut,int* pause,int* fin){ @@ -29,11 +32,12 @@ int CliqueTouche(int defaut,int* pause,int* fin){ case XK_space: if(*pause==1){ *pause=0; + return defaut; } else if(*pause==0){ *pause=1; + return defaut; } - return defaut; case XK_Escape: *fin=1; return defaut; @@ -43,7 +47,29 @@ int CliqueTouche(int defaut,int* pause,int* fin){ } /*deplacement de la queue du serpent en fonction de la trace laissée par la tete*/ -void DeplacementQueue(int tab[H][L],int* sxmin,int* symin,int* direc){ +void DeplacementQueue(int tab[H][L],int* sxmin,int* symin,int* direc, int menu){ + if(menu==3){ + if(*direc==0){ + *sxmin=*sxmin+1; + *direc=VoirCase(tab,*sxmin,*symin,*direc); + tab[*sxmin][*symin]=40; + } + else if(*direc==1){ + *symin=*symin-1; + *direc=VoirCase(tab,*sxmin,*symin,*direc); + tab[*sxmin][*symin]=40; + } + else if(*direc==2){ + *sxmin=*sxmin-1; + *direc=VoirCase(tab,*sxmin,*symin,*direc); + tab[*sxmin][*symin]=40; + } + else if(*direc==3){ + *symin=*symin+1; + *direc=VoirCase(tab,*sxmin,*symin,*direc); + tab[*sxmin][*symin]=40; + } + }else{ if(*direc==0){ *sxmin=*sxmin+1; *direc=VoirCase(tab,*sxmin,*symin,*direc); @@ -64,11 +90,13 @@ void DeplacementQueue(int tab[H][L],int* sxmin,int* symin,int* direc){ *direc=VoirCase(tab,*sxmin,*symin,*direc); tab[*sxmin][*symin]=0; } + } } /*Deplacement de la tete du seroent en fonction de la direction*/ -void DeplacementTete(int tab[H][L],int* sxmax,int* symax,int direction,int* temoin,int* fin,int* point){ - if(direction==2){ +void DeplacementTete(int tab[H][L],int* sxmax,int* symax,int direction,int* temoin,int* fin,int* point,int mode){ + if(mode==1){ + if(direction==2){ if(VerifChemin(tab,*sxmax-1,*symax)==1){ *sxmax=*sxmax-1; tab[*sxmax][*symax]=1; @@ -152,5 +180,177 @@ void DeplacementTete(int tab[H][L],int* sxmax,int* symax,int direction,int* temo }else{ *fin=1; } + }/*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*/ + }if(mode==2){ + if(direction==2){ + if(VerifChemin(tab,*sxmax-1,*symax)==1){ + *sxmax=*sxmax-1; + tab[*sxmax][*symax]=1; + }else if(VerifChemin(tab,*sxmax-1,*symax)==3){ + *sxmax=*sxmax-1; + tab[*sxmax][*symax]=1; + *point=*point+5; + DessinerScore(*point); + Pastille(tab,1,1); + *temoin=1; + }else if(VerifChemin(tab,*sxmax-1,*symax)==2){ + *sxmax=*sxmax-1; + tab[*sxmax][*symax]=1; + Pastille(tab,5,3); + Pastille(tab,1,2); + }else{ + *fin=1; + } } + /*droite*/ + if(direction==3){ + if(VerifChemin(tab,*sxmax,*symax+1)==1){ + *symax=*symax+1; + tab[*sxmax][*symax]=1; + }else if(VerifChemin(tab,*sxmax,*symax+1)==3){ + *symax=*symax+1; + tab[*sxmax][*symax]=1; + *point=*point+5; + DessinerScore(*point); + Pastille(tab,1,1); + *temoin=1; + }else if(VerifChemin(tab,*sxmax,*symax+1)==2){ + *symax=*symax+1; + tab[*sxmax][*symax]=1;; + Pastille(tab,5,3); + Pastille(tab,1,2); + }else{ + *fin=1; + } + } + /*gauche*/ + if(direction==1){ + if(VerifChemin(tab,*sxmax,*symax-1)==1){ + *symax=*symax-1; + tab[*sxmax][*symax]=1; + } + else if(VerifChemin(tab,*sxmax,*symax-1)==3){ + *symax=*symax-1; + tab[*sxmax][*symax]=1; + *point=*point+5; + DessinerScore(*point); + Pastille(tab,1,1); + *temoin=1; + }else if(VerifChemin(tab,*sxmax,*symax-1)==2){ + *symax=*symax-1; + tab[*sxmax][*symax]=1;; + Pastille(tab,5,3); + Pastille(tab,1,2); + }else{ + *fin=1; + } + } + /*bas*/ + if(direction==0){ + if(VerifChemin(tab,*sxmax+1,*symax)==1){ + *sxmax=*sxmax+1; + tab[*sxmax][*symax]=1; + } + else if(VerifChemin(tab,*sxmax+1,*symax)==3){ + *sxmax=*sxmax+1; + tab[*sxmax][*symax]=1; + *point=*point+5; + DessinerScore(*point); + Pastille(tab,1,1); + *temoin=1; + }else if(VerifChemin(tab,*sxmax+1,*symax)==2){ + *sxmax=*sxmax+1; + tab[*sxmax][*symax]=1; + Pastille(tab,5,3); + Pastille(tab,1,2); + }else{ + *fin=1; + } +/*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*/ + }}if(mode==3){ + if(direction==2){ + if(VerifChemin(tab,*sxmax-1,*symax)==1){ + *sxmax=*sxmax-1; + tab[*sxmax][*symax]=1; + }else if(VerifChemin(tab,*sxmax-1,*symax)==3){ + *sxmax=*sxmax-1; + tab[*sxmax][*symax]=1; + *point=*point+5; + DessinerScore(*point); + Pastille(tab,1,1); + *temoin=1; + }else if(VerifChemin(tab,*sxmax-1,*symax)==2){ + *sxmax=*sxmax-1; + tab[*sxmax][*symax]=1; + Pastille(tab,20,3); + Pastille(tab,1,2); + }else{ + *fin=1; + } + } + /*droite*/ + if(direction==3){ + if(VerifChemin(tab,*sxmax,*symax+1)==1){ + *symax=*symax+1; + tab[*sxmax][*symax]=1; + }else if(VerifChemin(tab,*sxmax,*symax+1)==3){ + *symax=*symax+1; + tab[*sxmax][*symax]=1; + *point=*point+5; + DessinerScore(*point); + Pastille(tab,1,1); + *temoin=1; + }else if(VerifChemin(tab,*sxmax,*symax+1)==2){ + *symax=*symax+1; + tab[*sxmax][*symax]=1;; + Pastille(tab,20,3); + Pastille(tab,1,2); + }else{ + *fin=1; + } + } + /*gauche*/ + if(direction==1){ + if(VerifChemin(tab,*sxmax,*symax-1)==1){ + *symax=*symax-1; + tab[*sxmax][*symax]=1; + } + else if(VerifChemin(tab,*sxmax,*symax-1)==3){ + *symax=*symax-1; + tab[*sxmax][*symax]=1; + *point=*point+5; + DessinerScore(*point); + Pastille(tab,1,1); + *temoin=1; + }else if(VerifChemin(tab,*sxmax,*symax-1)==2){ + *symax=*symax-1; + tab[*sxmax][*symax]=1;; + Pastille(tab,20,3); + Pastille(tab,1,2); + }else{ + *fin=1; + } + } + /*bas*/ + if(direction==0){ + if(VerifChemin(tab,*sxmax+1,*symax)==1){ + *sxmax=*sxmax+1; + tab[*sxmax][*symax]=1; + } + else if(VerifChemin(tab,*sxmax+1,*symax)==3){ + *sxmax=*sxmax+1; + tab[*sxmax][*symax]=1; + *point=*point+5; + DessinerScore(*point); + Pastille(tab,1,1); + *temoin=1; + }else if(VerifChemin(tab,*sxmax+1,*symax)==2){ + *sxmax=*sxmax+1; + tab[*sxmax][*symax]=1; + Pastille(tab,20,3); + Pastille(tab,1,2); + }else{ + *fin=1; + } + }} } diff --git a/Snake/Deplacement.h b/Snake/Deplacement.h index 41e94fa..08ec316 100644 --- a/Snake/Deplacement.h +++ b/Snake/Deplacement.h @@ -10,7 +10,7 @@ #define L 62 int CliqueTouche(int defaut, int *pause, int *fin); -void DeplacementQueue(int tab[H][L], int *sxmin, int *symin, int *direc); -void DeplacementTete(int tab[H][L], int *sxmax, int *symax, int direction, int *temoin, int *fin, int *point); +void DeplacementQueue(int tab[H][L], int *sxmin, int *symin, int *direc,int); +void DeplacementTete(int tab[H][L], int *sxmax, int *symax, int direction, int *temoin, int *fin, int *point,int menu); #endif // DEPLACEMENT_H diff --git a/Snake/Deplacement.o b/Snake/Deplacement.o new file mode 100644 index 0000000..bec87a9 Binary files /dev/null and b/Snake/Deplacement.o differ diff --git a/Snake/Menu.c b/Snake/Menu.c new file mode 100644 index 0000000..cb0e0b4 --- /dev/null +++ b/Snake/Menu.c @@ -0,0 +1,104 @@ +#include +#include +#include +#include "Menu.h" + +int MenuDebut(void){ + couleur c=CouleurParNom("green"); + ChoisirCouleurDessin(c); + RemplirRectangle(1300,100,300,200); + c=CouleurParNom("purple"); + ChoisirCouleurDessin(c); + RemplirRectangle(1300,400,300,200); + c=CouleurParNom("red"); + ChoisirCouleurDessin(c); + RemplirRectangle(1300,700,300,200); + + + + c=CouleurParNom("white"); + ChoisirCouleurDessin(c); + EcrireTexte(1400,150,"Normal",1); + EcrireTexte(1400,450,"Mirror",1); + EcrireTexte(1400,750,"Hard",1); + EcrireTexte(50,100,"Snake de Maxim Lalane et Raphael Beau",2); + EcrireTexte(200,200,"Choisissez un mode de jeu : ",1); + EcrireTexte(250,250,"-Normal, un jeu snake tout ce qu'il y a de plus basique",1); + EcrireTexte(250,300,"-Mirror, les murs sur les cotes tombent, les boules violettes font leur apparition !",1); + EcrireTexte(250,350,"-Hard, Bon courage !! (vraiment)",1); + EcrireTexte(200,450,"Les regles sont simples :",1); + + + c=CouleurParNom("dark blue"); + ChoisirCouleurDessin(c); + RemplirRectangle(650,483,20,20); + c=CouleurParNom("red"); + ChoisirCouleurDessin(c); + RemplirArc(650,483,20,20,360,360); + + c=CouleurParNom("dark blue"); + ChoisirCouleurDessin(c); + RemplirRectangle(803,582,20,20); + c=CouleurParNom("purple"); + ChoisirCouleurDessin(c); + RemplirArc(803,582,20,20,360,360); + + c=CouleurParNom("dark grey"); + ChoisirCouleurDessin(c); + RemplirRectangle(615,530,20,20); + c=CouleurParNom("black"); + ChoisirCouleurDessin(c); + DessinerRectangle(617,532,16,16); + + c=CouleurParNom("white"); + ChoisirCouleurDessin(c); + EcrireTexte(250,500,"Regle n1-Mangez un maximum de pommes pour grandir",1); + + c=CouleurParNom("white"); + ChoisirCouleurDessin(c); + EcrireTexte(250,550,"Regle n2-Ne vous prennez pas de murs , ou vous perdrez !",1); + + c=CouleurParNom("white"); + ChoisirCouleurDessin(c); + EcrireTexte(250,600,"Regle n3-Malheur a vous si vous prennez une prune surprise .",1); + + c=CouleurParNom("white"); + ChoisirCouleurDessin(c); + EcrireTexte(250,650,"Regle n4-N'oubliez pas de vous amuser ;)",1); + + while(1){ + if(SourisCliquee()==1){ + if(_X>=1300&&_Y>=100&&_X<=1600&&_Y<=300){ + return 1; + } + if(_X>=1300&&_Y>=400&&_X<=1600&&_Y<=600){ + return 2; + } + if(_X>=1300&&_Y>=700&&_X<=1600&&_Y<=900){ + return 3; + } + } + } +} +/*Initialisation de la page*/ +void InitEcran(void){ + InitialiserGraphique(); + CreerFenetre(10,10,1700,1000); + couleur c; + c=CouleurParNom("dark blue"); + ChoisirCouleurDessin(c); + RemplirRectangle(0,0,1700,1000); +} + +void MenuFinPerdu(void){ + couleur c=CouleurParNom("white"); + ChoisirCouleurDessin(c); + EcrireTexte(1350,200,"Dommage !",2); + EcrireTexte(1280,250,"Peut-etre une prochaine fois",2); +} + +void MenuFinGagne(void){ + couleur c=CouleurParNom("white"); + EcrireTexte(1350,200,"Felicitations !",2); + EcrireTexte(1280,200,"Vous etes trop fort !!",2); +} diff --git a/Snake/Menu.h b/Snake/Menu.h new file mode 100644 index 0000000..7aa7e96 --- /dev/null +++ b/Snake/Menu.h @@ -0,0 +1,14 @@ +#ifndef MENU_H +#define MENU_H + +#include +#include +#include +#include + +int MenuDebut(void); +void MenuFinGagne(void); +void MenuFinPerdu(void); +void InitEcran(void); + +#endif // MENU_H diff --git a/Snake/Menu.o b/Snake/Menu.o new file mode 100644 index 0000000..9c6e19e Binary files /dev/null and b/Snake/Menu.o differ diff --git a/Snake/ModifTab.c b/Snake/ModifTab.c index ca2c7f5..f9d9a14 100644 --- a/Snake/ModifTab.c +++ b/Snake/ModifTab.c @@ -5,10 +5,7 @@ #include /*initialisation du plateau de jeu*/ -void init(int tab[H][L]){ - /*creation de la page*/ - InitialiserGraphique(); - CreerFenetre(10,10,1700,1000); +void init(int tab[H][L], int mode){ int i,j; couleur c; c=CouleurParNom("dark blue"); @@ -16,7 +13,7 @@ void init(int tab[H][L]){ RemplirRectangle(0,0,1700,1000); DessinerScore(0); DessinerTimer(0); - /*initialisation de la grille a 0(vert)*/ + /*initialisation de la grille a 0(noir)*/ for(i=1;i suivant) { - Compteur_Temps++; - DessinerTimer(Compteur_Temps); - suivant = Microsecondes() + DELTA; - } - if (Microsecondes() > suivant3) { - DeplacementQueue(tab, pointeur_sxmin, pointeur_symin, pointeur_direc); - suivant3 = TempsArret(pointeur_temoin); - } - if (Microsecondes() > suivant2) { - DeplacementTete(tab, pointeur_sxmax, pointeur_symax, direction, pointeur_temoin, pointeur_fin, pointeur_point); - suivant2 = Microsecondes() + DELTO; - } - } - if (fin == 1) { - return EXIT_SUCCESS; + if (Microsecondes() > suivant) { + Compteur_Temps++; + DessinerTimer(Compteur_Temps); + suivant = Microsecondes() + DELTA; + } + if (Microsecondes() > suivant3) { + DeplacementQueue(tab, pointeur_sxmin, pointeur_symin, pointeur_direc,mode); + suivant3 = TempsArret(pointeur_temoin); + } + if (Microsecondes() > suivant2) { + DeplacementTete(tab, pointeur_sxmax, pointeur_symax, direction, pointeur_temoin, pointeur_fin, pointeur_point,mode); + suivant2 = Microsecondes() + DELTO; + } } + } + else if (fin == 1) { + if(Gagne(tab)==0){ + MenuFinGagne(); + }else{ + MenuFinPerdu(); + } + } } } diff --git a/Snake/main.o b/Snake/main.o new file mode 100644 index 0000000..a8ea7ae Binary files /dev/null and b/Snake/main.o differ diff --git a/Snake/makefile b/Snake/makefile index 35a2333..0f8c60c 100644 --- a/Snake/makefile +++ b/Snake/makefile @@ -1,14 +1,20 @@ -exec : ModifTab.o Afficher.o Chemin.o Deplacement.o main.o - gcc -o exec ModifTab.o Afficher.o Chemin.o Deplacement.o main.o -lgraph -run : exec +exec : Chemin.o Deplacement.o Afficher.o ModifTab.o main.o Menu.o + gcc -ansi -o exec Chemin.o Deplacement.o Afficher.o ModifTab.o main.o Menu.o -lgraph +run : exec ./exec -ModifTab.o : ModifTab.c - gcc -c ModifTab.c -lgraph -Afficher.o : Afficher.c - gcc -c Afficher.c -lgraph Chemin.o : Chemin.c gcc -c Chemin.c -lgraph Deplacement.o : Deplacement.c gcc -c Deplacement.c -lgraph +Afficher.o : Afficher.c + gcc -c Afficher.c -lgraph +ModifTab.o : ModifTab.c + gcc -c ModifTab.c -lgraph main.o : main.c gcc -c main.c -lgraph +Menu.o : Menu.c + gcc -c Menu.c -lgraph +clean : + rm -f *~ + rm -f *.o + rm exec