From 5248a8a2a9f244b1c45da6e00fae790a1a24bdde Mon Sep 17 00:00:00 2001 From: rognant Date: Mon, 18 Dec 2023 14:51:12 +0100 Subject: [PATCH] t --- graphique.c | 19 +++---------------- graphique.h | 6 +----- main.c | 7 ------- main.h | 6 +----- obstacles.c | 5 ----- obstacles.h | 5 ----- pommes.c | 11 ----------- pommes.h | 6 ------ serpent.c | 16 ---------------- serpent.h | 11 ----------- snake | Bin 21584 -> 21608 bytes 11 files changed, 5 insertions(+), 87 deletions(-) diff --git a/graphique.c b/graphique.c index 9780e87..c4aba68 100644 --- a/graphique.c +++ b/graphique.c @@ -3,22 +3,17 @@ #include "pommes.h" #include "obstacles.h" #include - void Attendre(unsigned int millisecondes) { usleep(millisecondes * 1000); } - 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; - /* Initialisation des obstacles*/ obstacles->positions = malloc(sizeof(Position) * obstacles->nombre); for (int i = 0; i < obstacles->nombre; i++) { @@ -26,7 +21,6 @@ void InitialiserJeu(Serpent* serpent, Pommes* pommes, Obstacles* obstacles) { obstacles->positions[i].y = rand() % HAUTEUR; } } - void AfficherSerpent(Serpent* serpent) { couleur couleurSerpent = CouleurParComposante(255, 255, 0); ChoisirCouleurDessin(couleurSerpent); @@ -34,13 +28,11 @@ void AfficherSerpent(Serpent* serpent) { RemplirRectangle(serpent->corps[i].x, serpent->corps[i].y, TAILLE_CASE, TAILLE_CASE); } } - void LibererMemoire(Serpent* serpent, Pommes* pommes, Obstacles* obstacles) { free(serpent->corps); LibererPommes(pommes); free(obstacles->positions); } - void Graphique() { InitialiserGraphique(); CreerFenetre(0, 0, 1240, 940); @@ -48,12 +40,10 @@ void Graphique() { Attendre(1000); EffacerEcran(CouleurParComposante(0, 0, 0)); } - void AffichageBasique() { ChoisirCouleurDessin(CouleurParComposante(111, 255, 94)); RemplirRectangle(0, 0, 1140, 760); } - void AfficherScore(int score) { char scoreText[20]; snprintf(scoreText, 20, "Score: %d", score); @@ -62,7 +52,6 @@ void AfficherScore(int score) { ChoisirCouleurDessin(CouleurParComposante(255, 255, 255)); EcrireTexte(20, 850, scoreText, 2); } - void AfficheTemps(int minute, int seconde) { char temps[6]; snprintf(temps, 6, "%02d:%02d", minute, seconde); @@ -71,17 +60,15 @@ void AfficheTemps(int minute, int seconde) { ChoisirCouleurDessin(CouleurParComposante(255, 255, 255)); EcrireTexte(20, 900, temps, 2); } - void AfficherEcranFin(int score) { - EffacerEcran(CouleurParComposante(0, 0, 0)); EcrireTexte(500, 300, "Game Over!", 2); char scoreText[20]; snprintf(scoreText, 20, "Score: %d", score); EcrireTexte(500, 400, scoreText, 2); + } - -int PauseJeu() { - while (1) { +int PauseJeu(int perdu) { + while (perdu != -1) { if (ToucheEnAttente()) { int touche = Touche(); if (touche == XK_space) { diff --git a/graphique.h b/graphique.h index 65d89a9..d3e5820 100644 --- a/graphique.h +++ b/graphique.h @@ -1,23 +1,19 @@ #ifndef GRAPHIQUE_H #define GRAPHIQUE_H - #include #include "serpent.h" #include #include - #define NOMBRE_POMMES 5 #define NOMBRE_OBSTACLES 20 - void Attendre(unsigned int millisecondes); void Graphique(); void AffichageBasique(); void AfficherScore(int score); void AfficheTemps(int minute, int seconde); void AfficherEcranFin(int score); -int PauseJeu(); +int PauseJeu(int perdu); void AfficherSerpent(Serpent* serpent); void InitialiserJeu(Serpent* serpent, Pommes* pommes, Obstacles* obstacles); void LibererMemoire(Serpent* serpent, Pommes* pommes, Obstacles* obstacles); - #endif diff --git a/main.c b/main.c index e489e4b..5ea7181 100644 --- a/main.c +++ b/main.c @@ -1,4 +1,3 @@ - #include "main.h" #include "serpent.h" #include "pommes.h" @@ -6,7 +5,6 @@ #include "graphique.h" #include #include - int main() { int direction = 1; unsigned long suivant = Microsecondes() + CYCLE; @@ -15,7 +13,6 @@ int main() { Serpent serpent; Pommes pommes; Obstacles obstacles; - InitialiserJeu(&serpent, &pommes, &obstacles); Graphique(); EffacerEcran(CouleurParComposante(0, 0, 0)); @@ -24,7 +21,6 @@ int main() { GenererObstacles(&obstacles, &pommes, &serpent); AfficherSerpent(&serpent); AfficherScore(score); - while (perdu != -1) { if (!jeuEnPause) { if (Microsecondes() > suivant) { @@ -41,7 +37,6 @@ int main() { AfficheTemps(temps[0], temps[1]); } } - if (ToucheEnAttente()) { int touche = Touche(); int nouvelleDirection; @@ -65,7 +60,6 @@ int main() { direction = nouvelleDirection; } } - DeplacerSerpent(&serpent, &direction); perdu = GestionCollision(&serpent, &pommes, &obstacles, perdu, &score); } else { @@ -80,7 +74,6 @@ int main() { } } } - LibererMemoire(&serpent, &pommes, &obstacles); return EXIT_SUCCESS; } diff --git a/main.h b/main.h index 90a1afd..23235d3 100644 --- a/main.h +++ b/main.h @@ -1,18 +1,15 @@ #ifndef MAIN_H #define MAIN_H - #include "serpent.h" #include "pommes.h" #include "obstacles.h" #include "graphique.h" - #define HAUTEUR 40 #define LARGEUR 60 #define TAILLE_CASE 19 #define NOMBRE_POMMES 5 #define NOMBRE_OBSTACLES 20 #define CYCLE 100000L - void Attendre(unsigned int millisecondes); void InitialiserJeu(Serpent* serpent, Pommes* pommes, Obstacles* obstacles); void AffichageBasique(); @@ -25,5 +22,4 @@ void AfficherSerpent(Serpent* serpent); void GenererObstacles(Obstacles* obstacles, Pommes* pommes, Serpent* serpent); void DeplacerSerpent(Serpent* serpent, int* direction); int GestionCollision(Serpent* serpent, Pommes* pommes, Obstacles* obstacles, int perdu, int* score); - -#endif +#endif diff --git a/obstacles.c b/obstacles.c index 259fde2..2e54b7e 100644 --- a/obstacles.c +++ b/obstacles.c @@ -1,25 +1,20 @@ #include "obstacles.h" - void GenererObstacles(Obstacles* obstacles, Pommes* pommes, Serpent* serpent) { couleur couleurObstacle = CouleurParComposante(128, 128, 128); obstacles->positions = (Position*)malloc(obstacles->nombre * sizeof(Position)); - if (obstacles->positions == NULL) { perror("Allocation error"); exit(EXIT_FAILURE); } - for (int i = 0; i < obstacles->nombre; i++) { do { obstacles->positions[i].x = rand() % LARGEUR; obstacles->positions[i].y = rand() % HAUTEUR; } while (CollisionAvecPommeSerpent(obstacles->positions[i], pommes->head) || CollisionAvecSerpent(serpent)); - ChoisirCouleurDessin(couleurObstacle); RemplirRectangle(obstacles->positions[i].x * TAILLE_CASE, obstacles->positions[i].y * TAILLE_CASE, TAILLE_CASE, TAILLE_CASE); } } - 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 && diff --git a/obstacles.h b/obstacles.h index 0a58169..ff7cac2 100644 --- a/obstacles.h +++ b/obstacles.h @@ -1,19 +1,14 @@ #ifndef OBSTACLES_H #define OBSTACLES_H - #include "pommes.h" #include "serpent.h" - #define LARGEUR 60 #define HAUTEUR 40 #define TAILLE_CASE 19 - typedef struct Obstacles { Position* positions; int nombre; } Obstacles; - void GenererObstacles(Obstacles* obstacles, Pommes* pommes, Serpent* serpent); int CollisionAvecObstacle(Serpent* serpent, Obstacles* obstacles); - #endif diff --git a/pommes.c b/pommes.c index c1863a3..9f5e07b 100644 --- a/pommes.c +++ b/pommes.c @@ -1,7 +1,6 @@ #include #include #include "pommes.h" - void LibererPommes(Pommes* pommes) { PommeNode* current = pommes->head; while (current != NULL) { @@ -11,55 +10,45 @@ void LibererPommes(Pommes* pommes) { } pommes->head = NULL; } - void GenererPommes(Pommes* pommes) { couleur couleurPommes = CouleurParComposante(255, 0, 0); pommes->head = NULL; - for (int i = 0; i < pommes->nombre; i++) { PommeNode* nouvellePomme = (PommeNode*)malloc(sizeof(PommeNode)); if (nouvellePomme == NULL) { perror("Allocation error"); exit(EXIT_FAILURE); } - nouvellePomme->position.x = rand() % LARGEUR; nouvellePomme->position.y = rand() % HAUTEUR; nouvellePomme->next = pommes->head; pommes->head = nouvellePomme; - ChoisirCouleurDessin(couleurPommes); RemplirArc(nouvellePomme->position.x * TAILLE_CASE, nouvellePomme->position.y * TAILLE_CASE, TAILLE_CASE, TAILLE_CASE, 360, 360); } } - void AjouterPomme(Pommes* pommes, int x, int y) { PommeNode* nouvellePomme = (PommeNode*)malloc(sizeof(PommeNode)); if (nouvellePomme == NULL) { perror("Allocation error"); exit(EXIT_FAILURE); } - nouvellePomme->position.x = x; nouvellePomme->position.y = y; nouvellePomme->next = pommes->head; pommes->head = nouvellePomme; pommes->nombre++; } - void GenererNouvellePomme(Pommes* pommes) { couleur couleurPommes = CouleurParComposante(255, 0, 0); int newX = rand() % LARGEUR; int newY = rand() % HAUTEUR; - // Assuming you have a function named AjouterPomme to add a new apple to the linked list. AjouterPomme(pommes, newX, newY); - ChoisirCouleurDessin(couleurPommes); RemplirArc(newX * TAILLE_CASE, newY * TAILLE_CASE, TAILLE_CASE, TAILLE_CASE, 360, 360); } - int CollisionAvecPommeSerpent(Position position, PommeNode* pommes) { PommeNode* current = pommes; while (current != NULL) { diff --git a/pommes.h b/pommes.h index 214842f..98a73ae 100644 --- a/pommes.h +++ b/pommes.h @@ -1,29 +1,23 @@ #ifndef POMMES_H #define POMMES_H - #include "serpent.h" #include "graphique.h" #include - #define LARGEUR 60 #define HAUTEUR 40 #define TAILLE_CASE 19 - typedef struct PommeNode { Position position; struct PommeNode* next; } PommeNode; - typedef struct Pommes { PommeNode* head; int nombre; } Pommes; - void LibererPommes(Pommes* pommes); void GenererPommes(Pommes* pommes); void AjouterPomme(Pommes* pommes, int x, int y); void GenererNouvellePomme(Pommes* pommes); int CollisionAvecPommeSerpent(Position position, PommeNode* pommes); int CollisionAvecPomme(Serpent* serpent, Pommes* pommes, int* score); - #endif diff --git a/serpent.c b/serpent.c index 10a3c1c..ef1d52b 100644 --- a/serpent.c +++ b/serpent.c @@ -1,22 +1,18 @@ #include "serpent.h" #include "pommes.h" - void DeplacerSerpent(Serpent* serpent, int* direction) { couleur couleurFond = CouleurParComposante(0, 0, 0); couleur couleurSerpent = CouleurParComposante(255, 255, 0); couleur couleurTerrain = CouleurParComposante(111, 255, 94); - // Clear the previous positions of the snake for (int i = 0; i < serpent->longueur; i++) { ChoisirCouleurDessin(couleurTerrain); RemplirRectangle(serpent->corps[i].x, serpent->corps[i].y, TAILLE_CASE, TAILLE_CASE); } - // Update the snake's body positions for (int i = serpent->longueur - 1; i > 0; i--) { serpent->corps[i] = serpent->corps[i - 1]; } - // Move the snake's head based on the direction if (*direction == 1) { serpent->corps[0].x += TAILLE_CASE; @@ -27,44 +23,35 @@ void DeplacerSerpent(Serpent* serpent, int* direction) { } else if (*direction == 4) { serpent->corps[0].y += TAILLE_CASE; } - // Draw the updated snake for (int i = 0; i < serpent->longueur; i++) { ChoisirCouleurDessin(couleurSerpent); RemplirRectangle(serpent->corps[i].x, serpent->corps[i].y, TAILLE_CASE, TAILLE_CASE); } - Attendre(100); } - int GestionCollision(Serpent* serpent, Pommes* pommes, Obstacles* obstacles, int perdu, int* score) { int loose = perdu; - if (CollisionAvecPomme(serpent, pommes, score)) { serpent->longueur = serpent->longueur + 2; serpent->corps = realloc(serpent->corps, sizeof(Position) * serpent->longueur); loose = 1; } - if (CollisionAvecObstacle(serpent, obstacles) || CollisionAvecSerpent(serpent) || CollisionAvecBordures(serpent)) { AfficherEcranFin(*score); Attendre(1000); loose = -1; } - return loose; } - 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 EstDirectionOpposee(int directionActuelle, int nouvelleDirection) { if ((directionActuelle == 1 && nouvelleDirection == 2) || (directionActuelle == 2 && nouvelleDirection == 1) || @@ -72,16 +59,13 @@ int EstDirectionOpposee(int directionActuelle, int nouvelleDirection) { (directionActuelle == 4 && nouvelleDirection == 3)) { return 1; // Les directions sont opposées } - return 0; // Les directions ne sont pas opposées } - 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; } int CollisionAvecPomme(Serpent* serpent, Pommes* pommes, int* score) { diff --git a/serpent.h b/serpent.h index b21f131..1553d2a 100644 --- a/serpent.h +++ b/serpent.h @@ -1,35 +1,24 @@ #ifndef SERPENT_H #define SERPENT_H - #include #include - #define TAILLE_CASE 19 #define LARGEUR 60 #define HAUTEUR 40 - typedef struct { int x; int y; } Position; - typedef struct { Position* corps; int longueur; } Serpent; - typedef struct Pommes Pommes; typedef struct Obstacles Obstacles; - extern void DeplacerSerpent(Serpent* serpent, int* direction); - extern int GestionCollision(Serpent* serpent, Pommes* pommes, Obstacles* obstacles, int perdu, int* score); - extern int CollisionAvecSerpent(Serpent* serpent); - extern int EstDirectionOpposee(int directionActuelle, int nouvelleDirection); - extern int CollisionAvecBordures(Serpent* serpent); int CollisionAvecPomme(Serpent* serpent, Pommes* pommes, int* score); - #endif // SERPENT_H diff --git a/snake b/snake index 9574ee7505fd435ef5a6be0bfedf631a6bf3b981..4c674567dce7ae03000e4281d56bde258221de22 100755 GIT binary patch delta 1371 zcmZ8geN0nV6u;+zN@*(6k-ovpas$xi_)Ua!YYg#~Ik=jSZ92QK>iH_**dtJC8>@yK1EKVfq-D zmOhPJ;XshO3{_l14@Xgge~r;ZBo6dG3yk$G63D``qWH@034VS`ye;@QO&b~OHK^X= zaJQODUJ59RYSuI;xM?*wih`R2A0Id>>zP+-M{pv3i^)xng2>A^$i{jV zf<6`GBd9mVn-6K$z%YMLwa*o)^-%G0721tCFn}kGPv9AJn{pDwCDP?*fILQg_J}Ng zrv4Kx;|Sh1y#qmXn#-eJ4=PHZ97YKirOW0>4tC=gi3#u--by?MUAWhh4J&xUvMn|6 zI8;|a@OlEQ)LceBlq0P&<+@k&oPtH!VBi1U|Hs!)xeFvO^&@Chf6(_vrru zC*w2$4~1z0UYty-iq3eNN;c63Yc`r=#j*uo*~0NV**nHWenFl`m$e8canPCt1_3d+^mzSz}-AAj<4!f|*W?XxYETe-`gYDf&?B@*4yZalG zA1F#G{V;D5yNKVKRg@ND{#Ql0M*J1=1aUZpE)tg$8|b~XQSwaU2gIes>C~)?_$qM= zaSM&+8u2g06U3KjK#RoBQ~8E)#?-%#mXw=*7;;Xl+k-K&r#MISTJD4O>mnFSq^o+G z$Iy(T6#U1Yw`xC6_Bp(pVTD_`Oemshj}@jci!cH!2wy-q;bCke^kEO-b-YWs8J7va zM^mO1A~B1w11ktkk~{N^4yq;Hfjb=b+vCIbrDx(5E&=T?g-b#EdVoRH+0jxDj6%lBaT-f274TpCWl44dyxuN*EsP87Q?DA-C4;kSh3le&;6N* zKRA2gDz@=y@G*|^XMkZvz7HxM60FF g;$aT_?(!J*Lmxay;mugQR|3&N#(1gPS z@l?bk7G4)m>T1}7XO$qg0>cVOMJuw*3m)mCWmz6#$-;N6S&bnQesre-sTK&NRPs8j zuJIk*v~Zd4i28{XZk?hQJcIr`zb{c9a;rHg*!3j%4!K;slUu6gQ(g+RCXv2jjkKFm zUN~393$wiArdCa|NXoX627`LaB89-MI$BoE`-2B59Wx&`TuUSkP}B1laWs14i*J#L z7dT11mrUMa1*A&V?mPP?o!ox=9>xBGYG3kj*XYR1S1OGu1E|2wF}ZLW>ta>{bq{43 z?fNKuUvG_lcTtud+zgQLyt5!Ao11C=Qf=cqbnEM34$}?W*S)eT%fnItRk$H`8`iR5 z#82a5;S(H++XY84!I%SHtT85Tn!V?5c!_tkEHV4_H175d{y9p{`;T4tHj=58oOfi|!!0O7oqJZK>`-)_B^nE@7Cp0AjJi8WY?~o(ty~ zvCevEZTE8{2Xp?GWgGo3O~ehv@6E~bVdB@kvfNMnGx1g8Xo_1P-bJjV^*BY9Gl^G- zZNw#X(+1*k;={yW(Omk8mx-?u4^Ynw#5{dDT_D3KKOH?{e)=1b+o!x1hHF1$i`NIS zpN9p9FiaeonrRr*GqRlbe}ALj?f3VR{~w&nFu`?PChSH178BgZY{FRFL0Ex}gnRL0 z!q0Gs@H|ctCgU>UJnAz|wBgx=Kj03+RIxF$GZgG%Xx|qGpMqz7OsNJfj jw~M1&JuKSRX;E7kh`rkqVH!ubFt&+cW