diff --git a/final.c b/final.c new file mode 100644 index 0000000..db400df --- /dev/null +++ b/final.c @@ -0,0 +1,52 @@ +#include +#include +#include +#include +#include + +#define HAUTEUR 40 +#define LARGEUR 60 +#define CYCLE 100000L +#define SEGMENT 10 + +/* Enumeration des différentes directions possibles */ +enum dir { UP = 2, DOWN = 3, LEFT = 0, RIGHT = 1 }; + +/* Structure pour stocker les coordonnées des segments du serpent */ +typedef struct { + int x,y; +}SnakePoint; + +typedef struct { + int *corps; +} Corps; + +/* 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].x * SEGMENT, snake[i].y * SEGMENT, SEGMENT, SEGMENT); + } +} + +void pomme(SnakePoint *pommes){ + /* Vérifie si le serpent a mangé la pomme à partir des coordonnées et génère une nouvelle pomme */ + for (int i = 0; i < 5; i++) { + pommes[i].x = rand() % LARGEUR; + pommes[i].y = rand() % HAUTEUR; + couleur p = CouleurParComposante(255,0, 0); + ChoisirCouleurDessin(s); + RemplirRectangle(pomme[i].x, pomme[i].y); + } + + + + + + + + + + + diff --git a/graphique.c b/graphique.c new file mode 100644 index 0000000..f9566ca --- /dev/null +++ b/graphique.c @@ -0,0 +1,60 @@ +#include +#include +#include +#include + +#define H 40 +#define L 60 +#define CYCLE 100000L; + +void graphique(int n){ + 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); + Touche(); + FermerGraphique(); + }; + enum Direction {Stop=0,Droite=XK_Right,Gauche=XK_Left,Haut=XK_Up,Bas=XK_Down}; + enum Direction direction; + +void snake(){ + couleur s; + s=CouleurParNom("yellow"); + ChoisirCouleurDessin(s); + RemplirRectangle(200,200); + +} +int main(void){ + int n; +graphique(); + int tab[H][L]; + int i,j,posx=100,posy=100,n=0; + double suivant; + suivant=Microseconde()+CYCLE; + for(i=0;isuivant){ + n++; + graphique(); + suivant= Microseconde()+CYCLE; + } + } + + + + + return EXIT_SUCCESS; +} + + + diff --git a/idée.c b/idée.c index 487a7cf..52dc90e 100644 --- a/idée.c +++ b/idée.c @@ -66,7 +66,6 @@ void deplacerSnake(Snake *snake) { snake->queue[0].x++; } } -} int collisionAvecFruit(Snake *snake, Fruit *fruit) { return snake->queue[0].x == fruit->position.x && snake->queue[0].y == fruit->position.y; @@ -83,9 +82,10 @@ int collisionAvecQueue(Snake *snake) { return 1; } } +} return 0; } - +*/ void jeuSnake() { initialiserGraphique(); @@ -122,7 +122,11 @@ void jeuSnake() { } int main(void) { + while(1){ + initialiserGraphique(); + dessinerCase(); jeuSnake(); - + afficherSnake(); + } return EXIT_SUCCESS; } diff --git a/mouvement.c~ b/mouvement.c~ deleted file mode 100644 index e69de29..0000000 diff --git a/serpent.c b/serpent.c index 12049df..00375bf 100644 --- a/serpent.c +++ b/serpent.c @@ -21,7 +21,7 @@ typedef struct{ /*permet de concevoir le graphique sur lequel le serpent se déplacera*/ void graphique(){ InitialiserGraphique(); - CreerFenetre(1700,950,1700,950); + CreerFenetre(10,10,1700,950); couleur c, b; b=CouleurParComposante(0,0,0); ChoisirCouleurDessin(b); @@ -116,18 +116,15 @@ int main() { graphique(); - while(1){ - if (Microsecondes()>suivant){ - g++; - suivant=Microsecondes()+CYCLE; - + + while (!perdu) { + serpent(snake, taille); + mouvement(snake, &taille, &dir, &pomme, &perdu); + usleep(CYCLE); } - serpent(snake, taille); - mouvement(snake, &taille, &dir, &pomme, &perdu); - } - if (perdu=1){ + if (perdu){ printf("Vous avez perdu ! \n"); FermerGraphique(); diff --git a/serpent.c~ b/serpent.c~ deleted file mode 100644 index 6a84e68..0000000 --- a/serpent.c~ +++ /dev/null @@ -1,137 +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()){ - 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].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(perdu!=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/snake.c b/snake.c index 8d7c96d..82a1daf 100644 --- a/snake.c +++ b/snake.c @@ -1,43 +1,112 @@ -#include -#include -#include -#include +#include +#include +#include +#include +#include #define HAUTEUR 40 #define LARGEUR 60 -#define CYCLE 10000L +#define CYCLE 100000L -#define SEGMENT 25 +#define SEGMENT 10 -/*enumération des différentes direction possible*/ -enum Direction { UP=2, DOWN=3, LEFT=0, RIGHT=1 }; +/* Enumeration des différentes directions possibles */ +enum dir { UP = 2, DOWN = 3, LEFT = 0, RIGHT = 1 }; -/*permet de stocker les coordonnes des segment du serpent*/ -typedef struct{ - int x, y; - } SnakePoint; +/* Structure pour stocker les coordonnées des segments du serpent */ +typedef struct { + int posx, posy; +} SnakePoint; -/*permet de concevoir le graphique sur lequel le serpent se déplacera*/ -void graphique(){ - InitialiserGraphique(); - CreerFenetre(1700,950,1700,950); +/* Fonction pour concevoir le graphique */ +void graphique() { + InitialiserGraphique(); + CreerFenetre(10,10,1700, 950); couleur c, b; - b=CouleurParComposante(0,0,0); + b = CouleurParComposante(0, 0, 0); ChoisirCouleurDessin(b); - RemplirRectangle(0,0,1750,950); - c=CouleurParComposante(111,255,94); + 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;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; + } + + /* Vérifie la collision avec la paroi intérieure du rectangle */ + if (snake[0].posx < 0 || snake[0].posx >= LARGEUR || snake[0].posy < 0 || snake[0].posy >= HAUTEUR) { + *perdu = 1; + return; + } + + /* Vérifie si le serpent a mangé la pomme à partir des coordonnées et génère une nouvelle pomme */ + if (snake[0].posx == pomme->posx && snake[0].posy == pomme->posy) { + pomme->posx = rand() % LARGEUR; + pomme->posy = rand() % HAUTEUR; + + /* Augmente la taille du serpent */ + (*taille)++; + } +} + +int main() { + /* Initialisation du jeu */ + graphique(); + SnakePoint snake[LARGEUR * HAUTEUR]; + SnakePoint pomme; + unsigned long suivant; + int perdu = 0; + int taille = 1; + int dir; + + srand(time(NULL)); + + /* Position initiale du serpent au milieu du tableau */ + snake[0].posx = LARGEUR / 2; + snake[0].posy = HAUTEUR / 2; + + /* Position initiale de la pomme à une position aléatoire à l'intérieur du rectangle */ + pomme.posx = (rand() % (LARGEUR - 2)) + 1; + pomme.posy = (rand() % (HAUTEUR - 2)) + 1; + + 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/snake.c~ b/snake.c~ deleted file mode 100644 index 572ce5c..0000000 --- a/snake.c~ +++ /dev/null @@ -1,104 +0,0 @@ -#include -#include -#include -#include - -#define HAUTEUR 40 -#define LARGEUR 60 - -#define CYCLE 10000L - -#define SEGMENT 10 - -enum Direction { UP, DOWN, LEFT=0, RIGHT=1 }; -int dir=1; - -void graphique(int g){ - 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); - Touche(); - FermerGraphique(); - }; - -void serpent(int tab[][LARGEUR],int taille) { - int posx_s,posy_s,i; - for(i=0;i0;i--){ - tab[i][0] = tab[i - 1][0]; - tab[i][1] = tab[i - 1][1] - } - - if(ToucheEnAttente()&&Touche()==XK_Left){ - dir=0; - } - else if(ToucheEnAttente()&&Touche()==XK_Right){ - dir=1; - } - else if(ToucheEnAttente()&&Touche()==XK_Up){ - dir=2; - } - else if(ToucheEnAttente()&&Touche()==XK_Down){ - dir=3; - } -} - -int main() { - int dir=1; - int tab[HAUTEUR][LARGEUR],g; - unsigned long suivant; - suivant=Microseconde()+CYCLE; - int taille =3; - for(int i = 0;i < taille; i++){ - tab[i][0] = LARGEUR / 2; - tab[i][1] = HAUTEUR / 2+1; - } - for(i=0;isuivant){ - g++; - graphique(g); - suivant=Microsecondes()+CYCLE; - } - while(1){ - - if (dir=0){ - tab[0][0] -=1; - break; - } - else if(dir=1){ - tab[0][0] +=1; - break; - } - else if(dir=2){ - tab[0][1] -=1; - break; - } - else if(dir=3){ - tab[0][1] +=1; - break; - - - return EXIT_SUCCESS; -}