#include #include #include #include #define HAUTEUR 40 #define LARGEUR 60 #define TAILLE_CASE 20 #define ESPACE_HAUT 35 #define ESPACE_BAS 85 #define NOMBRE_POMMES 5 #define CYCLE 100000L typedef struct { int x; int y; } Segment; void Attendre(unsigned int millisecondes) { usleep(millisecondes * 1000); } /* Fonction pour concevoir le graphique */ void Graphique() { InitialiserGraphique(); CreerFenetre(10, 10, 1240, 940); EcrireTexte(500, 400, "Le jeu va commencer !", 2); sleep(1); EffacerEcran(CouleurParComposante(0, 0, 0)); } void AffichageBasique() { ChoisirCouleurDessin(CouleurParComposante(111, 255, 94)); RemplirRectangle(10, 10, TAILLE_CASE * LARGEUR, TAILLE_CASE * LARGEUR); } /* Fonction permettant d'afficher le serpent */ void afficherSerpent(Segment serpent[], int taille) { int i; couleur couleurSerpent = CouleurParComposante(255,255,0); ChoisirCouleurDessin(couleurSerpent); for (i = 0; i < 10; i++) { serpent[i].x = LARGEUR / 2 + i * TAILLE_CASE; serpent[i].y = HAUTEUR / 2; } for (i = 0; i < taille; i++) { RemplirRectangle(serpent[i].x, serpent[i].y, TAILLE_CASE, TAILLE_CASE); } } void genererPommes(Segment pommes[]) { for (int i = 0; i < NOMBRE_POMMES; i++) { pommes[i].x = rand() % LARGEUR * TAILLE_CASE; pommes[i].y = rand() % HAUTEUR * TAILLE_CASE; ChoisirCouleurDessin(CouleurParComposante(255, 0, 0)); RemplirRectangle(pommes[i].x * TAILLE_CASE, pommes[i].y * TAILLE_CASE, TAILLE_CASE, TAILLE_CASE); } } void deplacerSerpent(int longueurSerpent, Segment serpent[], int *direction) { int i; couleur c; couleur v; couleur s; c = CouleurParComposante(0,0,0); s = CouleurParComposante(255,255,0); v = CouleurParComposante(111,255,94); for (i = 0; i < longueurSerpent; i++) { ChoisirCouleurDessin(v); RemplirRectangle(serpent[i].x, serpent[i].y, TAILLE_CASE, TAILLE_CASE); } for (i = longueurSerpent - 1; i > 0; i--) { serpent[i] = serpent[i - 1]; } if (ToucheEnAttente()) { int touche = Touche(); switch (touche) { case XK_Right: *direction = 1; break; case XK_Left: *direction = 2; break; case XK_Up: *direction = 3; break; case XK_Down: *direction = 4; break; } } /* Déplace la tête en fonction de la direction */ if (*direction == 1) { serpent[0].x += TAILLE_CASE; } else if (*direction == 2) { serpent[0].x -= TAILLE_CASE; } else if (*direction == 3) { serpent[0].y -= TAILLE_CASE; } else if (*direction == 4) { serpent[0].y += TAILLE_CASE; } for (i = 0; i < longueurSerpent; i++) { ChoisirCouleurDessin(s); RemplirRectangle(serpent[i].x, serpent[i].y, TAILLE_CASE, TAILLE_CASE); } Attendre(100); } int main() { int touche, perdu = 0, i, j, x = 0, direction = 1, longueurSerpent = 10; Segment serpent[LARGEUR * HAUTEUR]; Segment pommes[NOMBRE_POMMES]; couleur c = CouleurParComposante(0,0,0); couleur v = CouleurParComposante(111,255,94); couleur s = CouleurParComposante(255,255,0); srand(time(NULL)); /* Position initiale du serpent au milieu du tableau */ serpent[0].x = LARGEUR / 2 * TAILLE_CASE; serpent[0].y = HAUTEUR / 2 * TAILLE_CASE; Graphique(); EffacerEcran(c); AffichageBasique(); genererPommes(pommes); afficherSerpent(serpent, longueurSerpent); while (perdu!=-1) { deplacerSerpent(longueurSerpent, serpent, &direction); } Touche(); FermerGraphique(); return EXIT_SUCCESS; }