From 3a5864c276b562c6f53390aa80cff43dac16d42f Mon Sep 17 00:00:00 2001 From: rognant Date: Wed, 29 Nov 2023 13:05:44 +0100 Subject: [PATCH] t --- #serpent.c# | 136 -------------------------------------------- final.c | 20 ++++++- mouvement.c | 91 ------------------------------ serpent.c | 135 -------------------------------------------- test.c | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 178 insertions(+), 364 deletions(-) delete mode 100644 #serpent.c# delete mode 100644 mouvement.c delete mode 100644 serpent.c create mode 100644 test.c diff --git a/#serpent.c# b/#serpent.c# deleted file mode 100644 index 4f06d4e..0000000 --- a/#serpent.c# +++ /dev/null @@ -1,136 +0,0 @@ -#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/final.c b/final.c index db400df..592e3d9 100644 --- a/final.c +++ b/final.c @@ -18,8 +18,8 @@ typedef struct { }SnakePoint; typedef struct { - int *corps; -} Corps; + int posx, posy; +} PommePoint; /* Fonction pour afficher le serpent */ void serpent(SnakePoint *snake, int taille) { @@ -40,6 +40,22 @@ void pomme(SnakePoint *pommes){ RemplirRectangle(pomme[i].x, pomme[i].y); } + void MouvenmentTete(SnakePoint *){ + for (int i = *taille - 1; i > 0; i--) { + snake[i] = snake[i - 1]; + } + + /* Déplace la tête en fonction de la direction */ + if (*dir == LEFT) { + snake[0].posx = (snake[0].posx - 1 + LARGEUR) % LARGEUR; + } else if (*dir == RIGHT) { + snake[0].posx = (snake[0].posx + 1) % LARGEUR; + } else if (*dir == UP) { + snake[0].posy = (snake[0].posy - 1 + HAUTEUR) % HAUTEUR; + } else if (*dir == DOWN) { + snake[0].posy = (snake[0].posy + 1) % HAUTEUR; + } + diff --git a/mouvement.c b/mouvement.c deleted file mode 100644 index 5f82fa8..0000000 --- a/mouvement.c +++ /dev/null @@ -1,91 +0,0 @@ -#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/serpent.c b/serpent.c deleted file mode 100644 index 00375bf..0000000 --- a/serpent.c +++ /dev/null @@ -1,135 +0,0 @@ -#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(10,10,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 (!perdu) { - serpent(snake, taille); - mouvement(snake, &taille, &dir, &pomme, &perdu); - usleep(CYCLE); - } - - - if (perdu){ - printf("Vous avez perdu ! \n"); - FermerGraphique(); - - } - - return EXIT_SUCCESS; - -} diff --git a/test.c b/test.c new file mode 100644 index 0000000..0850e45 --- /dev/null +++ b/test.c @@ -0,0 +1,160 @@ +#include +#include +#include +#include + +#define HAUTEUR 40 +#define LARGEUR 60 +#define CYCLE 100000L +#define SEGMENT 20 + +/* Enumeration des différentes directions possibles */ +enum Direction { UP = 2, DOWN = 3, LEFT = 0, RIGHT = 1 }; + +/* Structure pour stocker les coordonnées des segments du serpent */ +typedef struct { + int posx, posy; +} SnakePoint; + +/* Structure pour stocker les coordonnées de la pomme */ +typedef struct { + int posx, posy; +} PommePoint; + +/* Fonction pour concevoir le graphique */ +void graphique() { + InitialiserGraphique(); + CreerFenetre(10, 10, 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); +} + +/* Fonction pour afficher le serpent */ +void serpent(SnakePoint *snake, int taille) { + for (int i = 0; i < taille; i++) { + couleur s = CouleurParComposante(255, 255, 0); + ChoisirCouleurDessin(s); + RemplirRectangle(snake[i].posx * SEGMENT, snake[i].posy * SEGMENT, SEGMENT, SEGMENT); + } +} + +/* Fonction pour générer les pommes */ +void genererPommes(PommePoint *pommes) { + for (int i = 0; i < 5; i++) { + pommes[i].posx = rand() % LARGEUR; + pommes[i].posy = rand() % HAUTEUR; + couleur p = CouleurParComposante(255,0, 0); + ChoisirCouleurDessin(p); + RemplirRectangle(pommes[i].posx, pommes[i].posy,10,10); + } +} + +/* Fonction pour gérer le mouvement de la tête du serpent */ +void mouvementTete(SnakePoint *snake, int *dir) { + /* Déplace la tête en fonction de la direction */ + if(ToucheEnAttente()){ + int touche = Touche(); + switch (touche) { + case XK_Left: + *dir = LEFT; + break; + case XK_Right: + *dir = RIGHT; + break; + case XK_Up: + *dir = UP; + break; + case XK_Down: + *dir = DOWN; + break; + } + /*deplace la tete en fonction de la direction*/ + if (*dir== LEFT){ + snake[0].posx -=1; + } + else if(*dir== RIGHT){ + snake[0].posx +=1; + } + else if(*dir== UP){ + snake[0].posy -=1; + } + else if(*dir== DOWN){ + snake[0].posy +=1; + } + + } + +} + +/* Fonction pour gérer le mouvement du corps du serpent */ +void mouvementCorps(SnakePoint *snake, int taille) { + /* Déplace le corps du serpent */ + for (int i = taille - 1; i > 0; i--) { + snake[i] = snake[i - 1]; + } +} + +/* Fonction pour gérer les collisions */ +int gererCollisions(SnakePoint *snake, int taille, PommePoint *pommes) { + /* Vérifie la collision avec la pomme */ + for (int i = 0; i < 5; i++) { + if (snake[0].posx == pommes[i].posx && snake[0].posy == pommes[i].posy) { + pommes[i].posx = (rand() % (LARGEUR - 2)) + 1; + pommes[i].posy = (rand() % (HAUTEUR - 2)) + 1; + + /*Augmente la taille du serpent*/ + (*taille)++; + return 1; /*Collision avec une pomme*/ + } + } + + /* Vérifie la collision avec la paroi intérieure du rectangle */ + if (snake[0].posx <= 0 || snake[0].posx >= LARGEUR - 1 || snake[0].posy <= 0 || snake[0].posy >= HAUTEUR - 1) { + return -1; // Collision avec la paroi + } + + return 0; // Pas de collision +} + +int main() { + /* Initialisation du jeu */ + graphique(); + SnakePoint snake[LARGEUR * HAUTEUR]; + PommePoint pommes[5]; + unsigned long suivant; + int perdu = 0; + int taille = 10; + int dir; + + srand(time(NULL)); + + /* Position initiale du serpent au milieu du tableau */ + snake[0].posx = LARGEUR / 2; + snake[0].posy = HAUTEUR / 2; + + graphique(); + genererPommes(pommes); + + while (!perdu) { + serpent(snake, taille); + mouvementTete(snake, &dir); + mouvementCorps(snake, taille); + perdu = gererCollisions(snake, taille, pommes); + usleep(CYCLE); + } + + if (perdu == -1) { + printf("Vous avez perdu ! Collision avec la paroi.\n"); + } else { + printf("Vous avez perdu ! Collision avec une pomme.\n"); + } + + FermerGraphique(); + + return EXIT_SUCCESS; +}