diff --git a/serpent.c b/serpent.c new file mode 100644 index 0000000..80dc3be --- /dev/null +++ b/serpent.c @@ -0,0 +1,134 @@ +#include +#include +#include +#include + +#define HAUTEUR 40 +#define LARGEUR 60 + +#define CYCLE 10000L + +#define SEGMENT 25 + +/*enumération des différentes direction possible*/ +enum Direction { UP=2, DOWN=3, LEFT=0, RIGHT=1 }; + +/*permet de stocker les coordonnes des segment du serpent*/ +typedef struct{ + int x, y; + } SnakePoint; + +/*permet de concevoir le graphique sur lequel le serpent se déplacera*/ +void graphique(){ + InitialiserGraphique(); + CreerFenetre(1700,950,1700,950); + couleur c, b; + b=CouleurParComposante(0,0,0); + ChoisirCouleurDessin(b); + RemplirRectangle(0,0,1750,950); + c=CouleurParComposante(111,255,94); + ChoisirCouleurDessin(c); + RemplirRectangle(100,100,1500,750); + FermerGraphique(); + }; + +/*Déclaration de la fonction, qui va permettre d'afficher le serpent selon la couleur de la composante*/ +void serpent(Point *snake,int taille) { + int i; + for(i=0;i0;i--){ + snake[i] = snake[i-1]; + } + /*cette partie permet de gérer les mouvement de la tete*/ + if(ToucheEnAttente()){ + if (Touche() ==XK_Left && *dir !=RIGHT){ + *dir= LEFT; + } + else if(Touche()==XK_Right && *dir != LEFT){ + *dir= RIGHT; + } + else if(Touche()==XK_Up && *dir != DOWN){ + *dir= UP; + } + else if(Touche()==XK_Down && *dir != UP){ + *dir= DOWN; + } +} + /*deplace la tete en fonction de la direction*/ + if (*dir== LEFT){ + snake[0].x -=1; + } + else if(*dir== RIGHT){ + snake[0].x +=1; + } + else if(*dir== UP){ + snake[0].y -=1; + } + else if(*dir== DOWN){ + snake[0].y +=1; + } + + if (snake[0].x < 0 || snake[0].x >= LARGEUR || snake[0].y < 0 || snake[0].y >= HAUTEUR){ + *perdu = 1; + return; + } + /*cette partie permet de verifier si le serpent a mangerla pomme a partir des coordonnes et genere une nouvelle pomme a une position aleatoire grace a rand*/ + if (snake[0].x == pomme->x && snake[0].y == pomme->y){ + pomme->x = rand() % LARGEUR; + pomme->y = rand() % HAUTEUR; + + /*permet d'augmenter la taille du serpent*/ + (*taille)++; + } +} +int main() { + + /*initialisation du jeu*/ + int perdu = 0; + int dir= RIGHT; + SnakePoint snake[HAUTEUR * LARGEUR]; + SnakePoint pomme; + unsigned long suivant; + int g=0; + suivant=Microsecondes()+CYCLE; + + /*taille minimum du serpent au début du jeu*/ + int taille =3; + + srand(time(NULL)); + + for(int i = 0;i < taille; i++){ + snake[i].x = LARGEUR / 2; + snake[i].y = HAUTEUR / 2+1; + } + pomme.x = rand() % LARGEUR; + pomme.y = rand() % HAUTEUR; + + graphique(); + + while(1){ + if (Microsecondes()>suivant){ + g++; + graphique(); + suivant=Microsecondes()+CYCLE; + } + + mouvement(snake, &taille, &dir, &pomme, &perdu); + + if (perdu){ + printf("Vous avez perdu ! \n"); + break; + } + serpent(snake, taille); + } + return EXIT_SUCCESS; + +} diff --git a/serpent.c~ b/serpent.c~ new file mode 100644 index 0000000..4dbab50 --- /dev/null +++ b/serpent.c~ @@ -0,0 +1,125 @@ +#include +#include +#include +#include + +#define HAUTEUR 40 +#define LARGEUR 60 + +#define CYCLE 10000L + +#define SEGMENT 25 + +enum Direction { UP=2, DOWN=3, LEFT=0, RIGHT=1 }; + +/*permet de stocker les coordonnes des segment du serpent*/ +def struct{ + int x, y + }point; + +/*permet de concevoir le graphique sur lequel le serpent se déplacera*/ +void graphique(){ + InitialiserGraphique(); + CreerFenetre(1700,950,1700,950); + couleur c, b; + b=CouleurParComposante(0,0,0); + ChoisirCouleurDessin(b); + RemplirRectangle(0,0,1750,950); + c=CouleurParComposante(111,255,94); + ChoisirCouleurDessin(c); + RemplirRectangle(100,100,1500,750); + FermerGraphique(); + }; + +void serpent(int tab[][LARGEUR],int taille) { + int i; + for(i=0;i0;i--){ + snake[i]= snake[i-1]; + } + /*cette partie permet de gérer les mouvement de la tete*/ + if(ToucheEnAttente()){ + if (Touche() ==XK_Left && *dir !=RIGHT){ + *dir= LEFT; + } + else if(Touche()==XK_Right && *dir != LEFT){ + *dir= RIGHT; + } + else if(Touche()==XK_Up && *dir != DOWN){ + *dir= UP; + } + else if(Touche()==XK_Down && *dir != UP){ + *dir= DOWN; + } +} + /*deplace la tete en fonction de la direction*/ + if (*dir== LEFT){ + snake[0].x -=1; + } + else if(*dir== RIGHT){ + snake[0].x +=1; + } + else if(*dir== UP){ + snake[0].y -=1; + } + else if(*dir== DOWN){ + snake[0].y +=1; + } + /*cette partie permet de verifier si le serpent a mangerla pomme a partir des coordonnes et genere une nouvelle pomme a une position aleatoire grace a rand*/ + if (snake[0].x == pomme->x && snake[0].y == pomme->y){ + pomme->x = rand()% LARGEUR; + pomme->y = rand()% HAUTEUR; + + /*permet d'augmenter la taille du serpent*/ + (*taille)++; + } +} +int main() { + int dir= RIGHT; + Point snake[HAUTEUR * LARGEUR]; + Point pomme; + unsigned long suivant; + int g=0; + suivant=Microsecondes()+CYCLE; + int taille =3; + + srand(time(NULL)); + + for(int i = 0;i < taille; i++){ + snake[i].x = LARGEUR / 2; + snake[i].y = HAUTEUR / 2+1; + } + + pomme->x = rand()% LARGEUR; + pomme->y = rand()% HAUTEUR; + + graphique(); + + while(1){ + if (Microsecondes()>suivant){ + g++; + graphique(); + suivant=Microsecondes()+CYCLE; + } + mouvement(tab,&taille,&dir); + + for(int i = 0; i < taille; i++){ + if (tab[i][0] < 0) tab [i][0] = LARGEUR - 1; + if (tab[i][0] >= LARGEUR) tab [i][0] = 0; + if (tab[i][1] < 0) tab [i][1] = HAUTEUR - 1; + if (tab[i][1] >= HAUTEUR) tab [i][1] = 0; + } + serpent(tab,taille); + } + return EXIT_SUCCESS; + +} + diff --git a/snake.c b/snake.c index 9813f04..e5de26c 100644 --- a/snake.c +++ b/snake.c @@ -21,7 +21,7 @@ void graphique(){ RemplirRectangle(0,0,1750,950); c=CouleurParComposante(111,255,94); ChoisirCouleurDessin(c); - RemplirRectangle(100,100,LARGEUR * SEGMENT,HAUTEUR * SEGMENT); + RemplirRectangle(100,100,1500,750); FermerGraphique(); };