diff --git a/snake.c b/snake.c new file mode 100644 index 0000000..c3681b2 --- /dev/null +++ b/snake.c @@ -0,0 +1,140 @@ +#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; +}