#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 posx, posy; } SnakePoint; /* 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érer le mouvement du serpent */ void mouvement(SnakePoint *snake, int *taille, int *dir, SnakePoint *pomme, int *perdu) { /* Déplace le serpent */ 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; } /* 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; }