diff --git a/idée.c b/idée.c index 52dc90e..3307497 100644 --- a/idée.c +++ b/idée.c @@ -9,7 +9,7 @@ #define NOMBRE_CASES_X (LARGEUR_FENETRE / TAILLE_CASE) #define NOMBRE_CASES_Y (HAUTEUR_FENETRE / TAILLE_CASE) -enum direction{UP,DOWN,RIGHT,LEFT}; +enum direction {UP, DOWN, RIGHT, LEFT}; typedef struct { int x, y; @@ -18,7 +18,7 @@ typedef struct { typedef struct { Position position; int taille; - Position queue[10]; // Augmentez la taille si nécessaire + Position queue[100]; // Augmentez la taille si nécessaire } Snake; typedef struct { @@ -47,25 +47,28 @@ void afficherFruit(Fruit *fruit) { dessinerCase(fruit->position, couleurFruit); } -void deplacerSnake(Snake *snake) { +void deplacerSnake(Snake *snake, enum direction dir) { // Déplacer la queue for (int i = snake->taille - 1; i > 0; i--) { snake->queue[i] = snake->queue[i - 1]; } // Déplacer la tête - if (ToucheEnAttente()) { - int touche = Touche(); - if (touche == UP) { + switch (dir) { + case UP: snake->queue[0].y--; - } else if (touche == DOWN) { + break; + case DOWN: snake->queue[0].y++; - } else if (touche == LEFT) { + break; + case LEFT: snake->queue[0].x--; - } else if (touche == RIGHT) { + break; + case RIGHT: snake->queue[0].x++; - } + break; } +} int collisionAvecFruit(Snake *snake, Fruit *fruit) { return snake->queue[0].x == fruit->position.x && snake->queue[0].y == fruit->position.y; @@ -82,16 +85,15 @@ int collisionAvecQueue(Snake *snake) { return 1; } } -} return 0; } -*/ + void jeuSnake() { initialiserGraphique(); Snake snake; - snake.position.x = NOMBRE_CASES_X / 2; - snake.position.y = NOMBRE_CASES_Y / 2; + snake.queue[0].x = NOMBRE_CASES_X / 2; + snake.queue[0].y = NOMBRE_CASES_Y / 2; snake.taille = 1; Fruit fruit; @@ -99,10 +101,12 @@ void jeuSnake() { fruit.position.x = rand() % NOMBRE_CASES_X; fruit.position.y = rand() % NOMBRE_CASES_Y; + enum direction direction = RIGHT; // Direction initiale + while (1) { - EffacerEcran(0); - - deplacerSnake(&snake); + EffacerEcran(0); + + deplacerSnake(&snake, direction); afficherSnake(&snake); afficherFruit(&fruit); @@ -118,15 +122,37 @@ void jeuSnake() { printf("Game Over!\n"); break; } + + if (ToucheEnAttente()) { + int touche = Touche(); + if (touche == 65 && direction != DOWN) { // 65 correspond à la touche '↑' + direction = UP; + } else if (touche == 66 && direction != UP) { // 66 correspond à la touche '↓' + direction = DOWN; + } else if (touche == 68 && direction != RIGHT) { // 68 correspond à la touche '←' + direction = LEFT; + } else if (touche == 67 && direction != LEFT) { // 67 correspond à la touche '→' + direction = RIGHT; + } + } } } int main(void) { - while(1){ + Snake snake; + Fruit fruit; + enum direction{RIGHT,UP,LEFT,DOWN}; + Position positionCase; + positionCase.x = 5; + positionCase.y = 5; + couleur couleurCase = CouleurParComposante(255, 255, 255); initialiserGraphique(); - dessinerCase(); - jeuSnake(); - afficherSnake(); - } + dessinerCase(positionCase, couleurCase); + afficherSnake(&Snake); + afficherFruit(&Fruit); + deplacerSnake(&Snake, direction); + jeuSnake(); + + return EXIT_SUCCESS; } diff --git a/jeu.c b/jeu.c index dd9d665..cc3a844 100644 --- a/jeu.c +++ b/jeu.c @@ -7,7 +7,7 @@ #define LARGEUR 60 #define CYCLE 100000L #define TAILLE_CASE 20 -#define SCORE_TO_WIN 5 +#define SCORE_TO_WIN 50 /* Enumeration des différentes directions possibles */ enum Direction { UP = 2, DOWN = 3, LEFT = 0, RIGHT = 1 }; @@ -64,7 +64,6 @@ void genererPommes(SnakePoint *pommes) { /* Fonction pour gérer le mouvement de la tête du serpent */ void mouvementTete(SnakePoint *snake, int *taille, int *score, int *dir) { - /* Déplace la tête en fonction de la direction */ if (ToucheEnAttente()) { int touche = Touche(); switch (touche) { @@ -81,17 +80,17 @@ void mouvementTete(SnakePoint *snake, int *taille, int *score, int *dir) { *dir = DOWN; break; } + } - /* Déplace la tête en fonction de la direction */ - if (*dir == LEFT) { - snake[0].posx -= 1; - } else if (*dir == RIGHT) { - snake[0].posx += 1; - } else if (*dir == UP) { - snake[0].posy -= 1; - } else if (*dir == DOWN) { - snake[0].posy += 1; - } + /* Déplace la tête en fonction de la direction */ + if (*dir == LEFT) { + snake[0].posx -= 1; + } else if (*dir == RIGHT) { + snake[0].posx += 1; + } else if (*dir == UP) { + snake[0].posy -= 1; + } else if (*dir == DOWN) { + snake[0].posy += 1; } } @@ -104,7 +103,7 @@ void mouvementCorps(SnakePoint *snake, int taille) { } /* Fonction pour gérer les collisions */ -int gererCollisions(SnakePoint *snake, int *taille, int *score, SnakePoint *pommes) { +int gererCollisions(SnakePoint *snake, int *taille, int *score, SnakePoint *pommes, int *aMangerPomme) { /* Vérifie la collision avec la pomme */ for (int i = 0; i < 5; i++) { if (snake[0].posx == pommes[i].posx && snake[0].posy == pommes[i].posy) { @@ -112,6 +111,7 @@ int gererCollisions(SnakePoint *snake, int *taille, int *score, SnakePoint *pomm *score += 5; pommes[i].posx = rand() % (LARGEUR - 2) + 1; pommes[i].posy = rand() % (HAUTEUR - 2) + 1; + *aMangerPomme = 1; return 1; /* Le serpent a mangé une pomme */ } } @@ -120,7 +120,6 @@ int gererCollisions(SnakePoint *snake, int *taille, int *score, SnakePoint *pomm if (snake[0].posx <= 0 || snake[0].posx >= LARGEUR - 1 || snake[0].posy <= 0 || snake[0].posy >= HAUTEUR - 1) { return -1; /* Collision avec la paroi */ } - return 0; /* Pas de collision */ } @@ -131,8 +130,8 @@ int main() { SnakePoint pommes[5]; int taille = 1; int score = 0; - int dir; - + int dir = RIGHT; // Ajout de la direction initiale + int aMangerPomme = 0; srand(time(NULL)); /* Position initiale du serpent au milieu du tableau */ @@ -167,23 +166,24 @@ int main() { /* Déplacement du serpent */ mouvementTete(snake, &taille, &score, &dir); mouvementCorps(snake, taille); - perdu = gererCollisions(snake, &taille, &score, pommes); + perdu = gererCollisions(snake, &taille, &score, pommes, &aMangerPomme); serpent(snake, taille); /* Génération de nouvelles pommes si le serpent en a mangé une */ - if (perdu == 1) { + if (aMangerPomme) { genererPommes(pommes); + aMangerPomme = 0; // Réinitialise la variable après avoir généré les pommes + perdu = 0; /* enlever ça pour faire des obstacle*/ } } } if (perdu == -1) { printf("Vous avez perdu ! Collision avec la paroi.\n"); - } else { - printf("Vous avez gagné avec un score de %d points ! Félicitations.\n", score); + FermerGraphique(); } - FermerGraphique(); + return EXIT_SUCCESS; }