From 311db2f7694ab4245e481fbc42bd7edb7adf21a6 Mon Sep 17 00:00:00 2001 From: mommeja Date: Tue, 12 Dec 2023 16:28:27 +0100 Subject: [PATCH] m --- .#jeu.c | 1 - serpent.c | 174 +++++++++++++++++++++++++----------------------------- 2 files changed, 82 insertions(+), 93 deletions(-) delete mode 120000 .#jeu.c diff --git a/.#jeu.c b/.#jeu.c deleted file mode 120000 index 4ef519d..0000000 --- a/.#jeu.c +++ /dev/null @@ -1 +0,0 @@ -mommeja@salle229-09.1735:1701946472 \ No newline at end of file diff --git a/serpent.c b/serpent.c index a50f74f..131f0d3 100644 --- a/serpent.c +++ b/serpent.c @@ -31,45 +31,35 @@ typedef struct { int nombre; } Obstacles; -pomme[i-1].position=pomme[i].position - -Serpent serpent; -Pommes pommes; -Obstacles obstacles; - -int score = 0; -int perdu = 0; - void Attendre(unsigned int millisecondes) { usleep(millisecondes * 1000); } -void InitialiserJeu() { - serpent.longueur = 10; - serpent.corps = malloc(sizeof(Position) * serpent.longueur); - pommes.nombre = NOMBRE_POMMES; - obstacles.nombre = NOMBRE_OBSTACLES; +void InitialiserJeu(Serpent* serpent, Pommes* pommes, Obstacles* obstacles) { + serpent->longueur = 10; + serpent->corps = malloc(sizeof(Position) * serpent->longueur); + pommes->nombre = NOMBRE_POMMES; + obstacles->nombre = NOMBRE_OBSTACLES; srand(time(NULL)); - serpent.corps[0].x = LARGEUR / 2 * TAILLE_CASE; - serpent.corps[0].y = HAUTEUR / 2 * TAILLE_CASE; - perdu = 0; + serpent->corps[0].x = LARGEUR / 2 * TAILLE_CASE; + serpent->corps[0].y = HAUTEUR / 2 * TAILLE_CASE; - // Initialisation des obstacles - obstacles.positions = malloc(sizeof(Position) * obstacles.nombre); - for (int i = 0; i < obstacles.nombre; i++) { - obstacles.positions[i].x = rand() % LARGEUR; - obstacles.positions[i].y = rand() % HAUTEUR; + /* Initialisation des obstacles*/ + obstacles->positions = malloc(sizeof(Position) * obstacles->nombre); + for (int i = 0; i < obstacles->nombre; i++) { + obstacles->positions[i].x = rand() % LARGEUR; + obstacles->positions[i].y = rand() % HAUTEUR; } } -void GenererObstacles() { +void GenererObstacles(Obstacles* obstacles) { couleur couleurObstacle = CouleurParComposante(0, 0, 255); - for (int i = 0; i < obstacles.nombre; i++) { + for (int i = 0; i < obstacles->nombre; i++) { ChoisirCouleurDessin(couleurObstacle); - RemplirRectangle(obstacles.positions[i].x * TAILLE_CASE, obstacles.positions[i].y * TAILLE_CASE, TAILLE_CASE, TAILLE_CASE); + RemplirRectangle(obstacles->positions[i].x * TAILLE_CASE, obstacles->positions[i].y * TAILLE_CASE, TAILLE_CASE, TAILLE_CASE); } } @@ -86,7 +76,7 @@ void AffichageBasique() { RemplirRectangle(0, 0, 1140, 760); } -void AfficherScore() { +void AfficherScore(int score) { char scoreText[20]; snprintf(scoreText, 20, "Score: %d", score); ChoisirCouleurDessin(CouleurParComposante(0, 0, 0)); @@ -107,10 +97,10 @@ int PauseJeu() { } } -void LibererMemoire() { - free(serpent.corps); - free(pommes.positions); - free(obstacles.positions); +void LibererMemoire(Serpent* serpent, Pommes* pommes, Obstacles* obstacles) { + free(serpent->corps); + free(pommes->positions); + free(obstacles->positions); } void AfficheTemps(int minute, int seconde) { @@ -122,121 +112,118 @@ void AfficheTemps(int minute, int seconde) { EcrireTexte(20, 900, temps, 2); } -void AfficherSerpent() { +void AfficherSerpent(Serpent* serpent) { couleur couleurSerpent = CouleurParComposante(255, 255, 0); ChoisirCouleurDessin(couleurSerpent); - for (int i = 0; i < serpent.longueur; i++) { - RemplirRectangle(serpent.corps[i].x, serpent.corps[i].y, TAILLE_CASE, TAILLE_CASE); + for (int i = 0; i < serpent->longueur; i++) { + RemplirRectangle(serpent->corps[i].x, serpent->corps[i].y, TAILLE_CASE, TAILLE_CASE); } } -void GenererPommes() { +void GenererPommes(Pommes* pommes) { couleur couleurPommes = CouleurParComposante(255, 0, 0); - pommes.positions = malloc(sizeof(Position) * pommes.nombre); + pommes->positions = malloc(sizeof(Position) * pommes->nombre); - for (int i = 0; i < pommes.nombre; i++) { - pommes.positions[i].x = rand() % LARGEUR; - pommes.positions[i].y = rand() % HAUTEUR; + for (int i = 0; i < pommes->nombre; i++) { + pommes->positions[i].x = rand() % LARGEUR; + pommes->positions[i].y = rand() % HAUTEUR; ChoisirCouleurDessin(couleurPommes); - RemplirRectangle(pommes.positions[i].x * TAILLE_CASE, pommes.positions[i].y * TAILLE_CASE, TAILLE_CASE, TAILLE_CASE); + RemplirRectangle(pommes->positions[i].x * TAILLE_CASE, pommes->positions[i].y * TAILLE_CASE, TAILLE_CASE, TAILLE_CASE); } } -void GenererNouvellePomme() { +void GenererNouvellePomme(Pommes* pommes) { couleur couleurPommes = CouleurParComposante(255, 0, 0); - int i = rand() % pommes.nombre; - pommes.positions[i].x = rand() % LARGEUR; - pommes.positions[i].y = rand() % HAUTEUR; + int i = rand() % pommes->nombre; + pommes->positions[i].x = rand() % LARGEUR; + pommes->positions[i].y = rand() % HAUTEUR; ChoisirCouleurDessin(couleurPommes); - RemplirRectangle(pommes.positions[i].x * TAILLE_CASE, pommes.positions[i].y * TAILLE_CASE, TAILLE_CASE, TAILLE_CASE); + RemplirRectangle(pommes->positions[i].x * TAILLE_CASE, pommes->positions[i].y * TAILLE_CASE, TAILLE_CASE, TAILLE_CASE); } -int CollisionAvecPomme() { - for (int i = 0; i < pommes.nombre; i++) { - if (serpent.corps[0].x >= pommes.positions[i].x * TAILLE_CASE && - serpent.corps[0].x < (pommes.positions[i].x + 1) * TAILLE_CASE && - serpent.corps[0].y >= pommes.positions[i].y * TAILLE_CASE && - serpent.corps[0].y < (pommes.positions[i].y + 1) * TAILLE_CASE) { - GenererNouvellePomme(); - score = score + 5; - AfficherScore(); +int CollisionAvecPomme(Serpent* serpent, Pommes* pommes, int* score) { + for (int i = 0; i < pommes->nombre; i++) { + if (serpent->corps[0].x >= pommes->positions[i].x * TAILLE_CASE && + serpent->corps[0].x < (pommes->positions[i].x + 1) * TAILLE_CASE && + serpent->corps[0].y >= pommes->positions[i].y * TAILLE_CASE && + serpent->corps[0].y < (pommes->positions[i].y + 1) * TAILLE_CASE) { + GenererNouvellePomme(pommes); + *score = *score + 5; + AfficherScore(*score); return 1; } } return 0; } -int CollisionAvecObstacle() { - for (int i = 0; i < obstacles.nombre; i++) { - if (serpent.corps[0].x == obstacles.positions[i].x * TAILLE_CASE && - serpent.corps[0].y == obstacles.positions[i].y * TAILLE_CASE) { - perdu = -1; // Le serpent a perdu +int CollisionAvecObstacle(Serpent* serpent, Obstacles* obstacles) { + for (int i = 0; i < obstacles->nombre; i++) { + if (serpent->corps[0].x == obstacles->positions[i].x * TAILLE_CASE && + serpent->corps[0].y == obstacles->positions[i].y * TAILLE_CASE) { return 1; } } return 0; } -int CollisionAvecSerpent() { - for (int i = 1; i < serpent.longueur; i++) { - if (serpent.corps[0].x == serpent.corps[i].x && serpent.corps[0].y == serpent.corps[i].y) { - perdu = -1; +int CollisionAvecSerpent(Serpent* serpent) { + for (int i = 1; i < serpent->longueur; i++) { + if (serpent->corps[0].x == serpent->corps[i].x && serpent->corps[0].y == serpent->corps[i].y) { return 1; } } return 0; } -int CollisionAvecBordures() { - if (serpent.corps[0].x < 0 || serpent.corps[0].x >= LARGEUR * TAILLE_CASE || - serpent.corps[0].y < 0 || serpent.corps[0].y >= HAUTEUR * TAILLE_CASE) { - perdu = -1; +int CollisionAvecBordures(Serpent* serpent) { + if (serpent->corps[0].x < 0 || serpent->corps[0].x >= LARGEUR * TAILLE_CASE || + serpent->corps[0].y < 0 || serpent->corps[0].y >= HAUTEUR * TAILLE_CASE) { return 1; } return 0; } -void DeplacerSerpent(int* direction) { +void DeplacerSerpent(Serpent* serpent, int* direction) { couleur couleurFond = CouleurParComposante(0, 0, 0); couleur couleurSerpent = CouleurParComposante(255, 255, 0); couleur couleurTerrain = CouleurParComposante(111, 255, 94); - for (int i = 0; i < serpent.longueur; i++) { + for (int i = 0; i < serpent->longueur; i++) { ChoisirCouleurDessin(couleurTerrain); - RemplirRectangle(serpent.corps[i].x, serpent.corps[i].y, TAILLE_CASE, TAILLE_CASE); + RemplirRectangle(serpent->corps[i].x, serpent->corps[i].y, TAILLE_CASE, TAILLE_CASE); } - for (int i = serpent.longueur - 1; i > 0; i--) { - serpent.corps[i] = serpent.corps[i - 1]; + for (int i = serpent->longueur - 1; i > 0; i--) { + serpent->corps[i] = serpent->corps[i - 1]; } if (*direction == 1) { - serpent.corps[0].x += TAILLE_CASE; + serpent->corps[0].x += TAILLE_CASE; } else if (*direction == 2) { - serpent.corps[0].x -= TAILLE_CASE; + serpent->corps[0].x -= TAILLE_CASE; } else if (*direction == 3) { - serpent.corps[0].y -= TAILLE_CASE; + serpent->corps[0].y -= TAILLE_CASE; } else if (*direction == 4) { - serpent.corps[0].y += TAILLE_CASE; + serpent->corps[0].y += TAILLE_CASE; } - for (int i = 0; i < serpent.longueur; i++) { + for (int i = 0; i < serpent->longueur; i++) { ChoisirCouleurDessin(couleurSerpent); - RemplirRectangle(serpent.corps[i].x, serpent.corps[i].y, TAILLE_CASE, TAILLE_CASE); + RemplirRectangle(serpent->corps[i].x, serpent->corps[i].y, TAILLE_CASE, TAILLE_CASE); } Attendre(100); } -int GestionCollision(int perdu) { +int GestionCollision(Serpent* serpent, Pommes* pommes, Obstacles* obstacles, int perdu, int* score) { int loose = perdu; - if (CollisionAvecPomme()) { - serpent.longueur = serpent.longueur + 2; - serpent.corps = realloc(serpent.corps, sizeof(Position) * serpent.longueur); + if (CollisionAvecPomme(serpent, pommes, score)) { + serpent->longueur = serpent->longueur + 2; + serpent->corps = realloc(serpent->corps, sizeof(Position) * serpent->longueur); loose = 1; } - if (CollisionAvecObstacle() || CollisionAvecSerpent() || CollisionAvecBordures()) { + if (CollisionAvecObstacle(serpent, obstacles) || CollisionAvecSerpent(serpent) || CollisionAvecBordures(serpent)) { loose = -1; } return loose; @@ -246,17 +233,20 @@ int main() { int direction = 1; unsigned long suivant = Microsecondes() + CYCLE; int temps[2] = {0, 0}, seconde_actuel, old_seconde; - int jeuEnPause = 0; - int perdu = 0; + int jeuEnPause = 0, perdu = 0, score = 0; - InitialiserJeu(); + Serpent serpent; + Pommes pommes; + Obstacles obstacles; + + InitialiserJeu(&serpent, &pommes, &obstacles); Graphique(); EffacerEcran(CouleurParComposante(0, 0, 0)); AffichageBasique(); - GenererPommes(); - GenererObstacles(); // Ajout de la génération des obstacles - AfficherSerpent(); - AfficherScore(); + GenererPommes(&pommes); + GenererObstacles(&obstacles); + AfficherSerpent(&serpent); + AfficherScore(score); while (perdu != -1) { if (!jeuEnPause) { @@ -296,8 +286,8 @@ int main() { return EXIT_FAILURE; } } - DeplacerSerpent(&direction); - perdu = GestionCollision(perdu); + DeplacerSerpent(&serpent, &direction); + perdu = GestionCollision(&serpent, &pommes, &obstacles, perdu, &score); } else { if (ToucheEnAttente()) { int touche = Touche(); @@ -312,6 +302,6 @@ int main() { } FermerGraphique(); - LibererMemoire(); + LibererMemoire(&serpent, &pommes, &obstacles); return EXIT_SUCCESS; }