#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; }