From 3c470b5be82d43eeaac61283f68b73458ca651cc Mon Sep 17 00:00:00 2001 From: rognant Date: Mon, 27 Nov 2023 15:43:45 +0100 Subject: [PATCH] T --- #serpent.c# | 136 ++++++++++++++++++++++++++++++++++++++++ mouvement.c | 91 +++++++++++++++++++++++++++ test.c~ => mouvement.c~ | 0 serpent.c | 50 ++++++++------- serpent.c~ | 74 +++++++++++++--------- snake.c | 83 ++++-------------------- test.c | 96 ---------------------------- 7 files changed, 308 insertions(+), 222 deletions(-) create mode 100644 #serpent.c# create mode 100644 mouvement.c rename test.c~ => mouvement.c~ (100%) delete mode 100644 test.c diff --git a/#serpent.c# b/#serpent.c# new file mode 100644 index 0000000..4f06d4e --- /dev/null +++ b/#serpent.c# @@ -0,0 +1,136 @@ +#include +#include +#include +#include + +#define HAUTEUR 40 +#define LARGEUR 60 +#define CYCLE 10000L +#define SEGMENT 10 + +/*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); +}; + +/*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*/ + graphique(); + int tab[HAUTEUR][LARGEUR]; + int i,j; + 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 =10; + + 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++; + suivant=Microsecondes()+CYCLE; + + } + serpent(snake, taille); + mouvement(snake, &taille, &dir, &pomme, &perdu); + } + + + if (perdu=1){ + printf("Vous avez perdu ! \n"); + FermerGraphique(); + + } + + return EXIT_SUCCESS; + +} diff --git a/mouvement.c b/mouvement.c new file mode 100644 index 0000000..5f82fa8 --- /dev/null +++ b/mouvement.c @@ -0,0 +1,91 @@ +#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)++; + } +} diff --git a/test.c~ b/mouvement.c~ similarity index 100% rename from test.c~ rename to mouvement.c~ diff --git a/serpent.c b/serpent.c index 80dc3be..12049df 100644 --- a/serpent.c +++ b/serpent.c @@ -8,7 +8,7 @@ #define CYCLE 10000L -#define SEGMENT 25 +#define SEGMENT 10 /*enumération des différentes direction possible*/ enum Direction { UP=2, DOWN=3, LEFT=0, RIGHT=1 }; @@ -20,17 +20,16 @@ typedef struct{ /*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(); - }; + 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); +}; /*Déclaration de la fonction, qui va permettre d'afficher le serpent selon la couleur de la composante*/ void serpent(Point *snake,int taille) { @@ -76,7 +75,7 @@ void mouvement(Point *snake, int *taille, int *dir, Point *pomme,int *perdu){ snake[0].y +=1; } - if (snake[0].x < 0 || snake[0].x >= LARGEUR || snake[0].y < 0 || snake[0].y >= HAUTEUR){ + if (snake[0].x < 0 || snake[0].x >= LARGEUR || snake[0].y < 0 || snake[0].y >= HAUTEUR){ *perdu = 1; return; } @@ -92,6 +91,9 @@ void mouvement(Point *snake, int *taille, int *dir, Point *pomme,int *perdu){ int main() { /*initialisation du jeu*/ + graphique(); + int tab[HAUTEUR][LARGEUR]; + int i,j; int perdu = 0; int dir= RIGHT; SnakePoint snake[HAUTEUR * LARGEUR]; @@ -101,7 +103,7 @@ int main() { suivant=Microsecondes()+CYCLE; /*taille minimum du serpent au début du jeu*/ - int taille =3; + int taille =10; srand(time(NULL)); @@ -117,18 +119,20 @@ int main() { 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); + serpent(snake, taille); + mouvement(snake, &taille, &dir, &pomme, &perdu); } + + + if (perdu=1){ + printf("Vous avez perdu ! \n"); + FermerGraphique(); + + } + return EXIT_SUCCESS; } diff --git a/serpent.c~ b/serpent.c~ index 4dbab50..6a84e68 100644 --- a/serpent.c~ +++ b/serpent.c~ @@ -10,12 +10,13 @@ #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*/ -def struct{ - int x, y - }point; +typedef struct{ + int x, y; + } SnakePoint; /*permet de concevoir le graphique sur lequel le serpent se déplacera*/ void graphique(){ @@ -31,7 +32,8 @@ void graphique(){ FermerGraphique(); }; -void serpent(int tab[][LARGEUR],int taille) { +/*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]; + snake[i] = snake[i-1]; } /*cette partie permet de gérer les mouvement de la tete*/ if(ToucheEnAttente()){ - if (Touche() ==XK_Left && *dir !=RIGHT){ + int touche = Touche(); + switch (touche){ + case XK_Left: *dir= LEFT; - } - else if(Touche()==XK_Right && *dir != LEFT){ + break; + case XK_Right: *dir= RIGHT; - } - else if(Touche()==XK_Up && *dir != DOWN){ + break; + case XK_Up: *dir= UP; - } - else if(Touche()==XK_Down && *dir != UP){ + break; + case XK_Down: *dir= DOWN; - } -} + break; + } /*deplace la tete en fonction de la direction*/ if (*dir== LEFT){ snake[0].x -=1; @@ -73,22 +77,33 @@ void mouvement(Point *snake, int *taille, int *dir, Point *pomme){ 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; + 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; - Point snake[HAUTEUR * LARGEUR]; - Point pomme; + 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)); @@ -97,29 +112,26 @@ int main() { snake[i].x = LARGEUR / 2; snake[i].y = HAUTEUR / 2+1; } - - pomme->x = rand()% LARGEUR; - pomme->y = rand()% HAUTEUR; + pomme.x = rand() % LARGEUR; + pomme.y = rand() % HAUTEUR; graphique(); - while(1){ + while(perdu!=1){ if (Microsecondes()>suivant){ g++; graphique(); suivant=Microsecondes()+CYCLE; } - mouvement(tab,&taille,&dir); + + mouvement(snake, &taille, &dir, &pomme, &perdu); - 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; + if (perdu){ + printf("Vous avez perdu ! \n"); + break; } - serpent(tab,taille); + serpent(snake, taille); } return EXIT_SUCCESS; } - diff --git a/snake.c b/snake.c index e5de26c..8d7c96d 100644 --- a/snake.c +++ b/snake.c @@ -10,8 +10,15 @@ #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); @@ -25,80 +32,12 @@ void graphique(){ FermerGraphique(); }; -void serpent(int tab[][LARGEUR],int taille) { - int posx_s,posy_s,i; +/*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--){ - tab[i][0] = tab[i - 1][0]; - tab[i][1] = tab[i - 1][1]; - } - 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; - } -} - if (*dir== LEFT){ - tab[0][0] -=1; - } - else if(*dir== RIGHT){ - tab[0][0] +=1; - } - else if(*dir== UP){ - tab[0][1] -=1; - } - else if(*dir== DOWN){ - tab[0][1] +=1; - } -} -int main() { - int dir= RIGHT; - int tab[HAUTEUR * LARGEUR][2]; - unsigned long suivant; - int g=0; - suivant=Microsecondes()+CYCLE; - int taille =3; - - for(int i = 0;i < taille; i++){ - tab[i][0] = LARGEUR / 2; - tab[i][1] = HAUTEUR / 2+1; - } - 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/test.c b/test.c deleted file mode 100644 index 13f9ae2..0000000 --- a/test.c +++ /dev/null @@ -1,96 +0,0 @@ -#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 }; - -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, LARGEUR * SEGMENT, HAUTEUR * SEGMENT); - FermerGraphique(); -} - -void serpent(int tab[][LARGEUR], int taille) { - int posx_s, posy_s, i; - for (i = 0; i < taille; i++) { - posx_s = tab[i][0] * SEGMENT; - posy_s = tab[i][1] * SEGMENT; - couleur s = CouleurParComposante(255, 255, 0); - ChoisirCouleurDessin(s); - RemplirRectangle(posx_s, posy_s, SEGMENT, SEGMENT); - } -} - -void mouvement(int tab[][LARGEUR], int *taille, int *dir) { - for (int i = *taille - 1; i > 0; i--) { - tab[i][0] = tab[i - 1][0]; - tab[i][1] = tab[i - 1][1]; - } - 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; - } - } - if (*dir == LEFT) { - tab[0][0] -= 1; - if (tab[0][0] < 0) tab[0][0] = LARGEUR - 1; - } else if (*dir == RIGHT) { - tab[0][0] += 1; - if (tab[0][0] >= LARGEUR) tab[0][0] = 0; - } else if (*dir == UP) { - tab[0][1] -= 1; - if (tab[0][1] < 0) tab[0][1] = HAUTEUR - 1; - } else if (*dir == DOWN) { - tab[0][1] += 1; - if (tab[0][1] >= HAUTEUR) tab[0][1] = 0; - } -} - -int main() { - int dir = RIGHT; - int tab[HAUTEUR * LARGEUR][2]; - unsigned long suivant; - int g = 0; - suivant = Microsecondes() + CYCLE; - int taille = 3; - - for (int i = 0; i < taille; i++) { - tab[i][0] = LARGEUR / 2; - tab[i][1] = HAUTEUR / 2 + 1; - } - - graphique(); - - while (1) { - if (Microsecondes() > suivant) { - g++; - graphique(); - suivant = Microsecondes() + CYCLE; - } - mouvement(tab, &taille, &dir); - serpent(tab, taille); - } - - return EXIT_SUCCESS; -}