From a919e3d9e39ff408102a1ad058d6dcf630eee70d Mon Sep 17 00:00:00 2001 From: brigitte Date: Fri, 22 Dec 2023 11:44:28 +0100 Subject: [PATCH] =?UTF-8?q?r=C3=A9organisation=20finale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JEUX_SERPENT/Makefile | 14 +-- JEUX_SERPENT/fonction.h | 14 +-- JEUX_SERPENT/main.c | 45 +++++---- JEUX_SERPENT/scene.c | 174 ++++++++++++++++++++++++++++---- JEUX_SERPENT/timer_score_menu.c | 32 +++++- 5 files changed, 211 insertions(+), 68 deletions(-) diff --git a/JEUX_SERPENT/Makefile b/JEUX_SERPENT/Makefile index 78f75a8..18638a4 100644 --- a/JEUX_SERPENT/Makefile +++ b/JEUX_SERPENT/Makefile @@ -6,8 +6,8 @@ all:Jeux run:Jeux ./Jeux -Jeux:main.o scene.o serpent.o timer.o score.o - $(CC) $(CFLAGS) -o Jeux main.o scene.o serpent.o timer.o score.o +Jeux:main.o scene.o timer_score_menu.o + $(CC) $(CFLAGS) -o Jeux main.o scene.o timer_score_menu.o main.o:main.c fonction.h $(CC) -c main.c $(CFLAGS) @@ -15,13 +15,7 @@ main.o:main.c fonction.h scene.o:scene.c fonction.h $(CC) -c scene.c $(CFLAGS) -serpent.o: serpent.c fonction.h - $(CC) -c serpent.c $(CFLAGS) - -timer.o:timer.c fonction.h - $(CC) -c timer.c $(CFLAGS) - -score.o:score.c fonction.h - $(CC) -c score.c $(CFLAGS) +timer.o:timer_score_menu.c fonction.h + $(CC) -c timer_score_menu.c $(CFLAGS) clean:-rm -f *.o Jeux diff --git a/JEUX_SERPENT/fonction.h b/JEUX_SERPENT/fonction.h index 0a181d8..eb876c5 100644 --- a/JEUX_SERPENT/fonction.h +++ b/JEUX_SERPENT/fonction.h @@ -4,33 +4,23 @@ #include #include -extern char timer[6]; - -extern int pos_x[2400], pos_y[2400], old_x[2400], old_y[2400]; - -extern int pommex[5], pommey[5]; -extern char score[4]; extern int go_on; extern int go_menu; extern int pause; void Pomme(int pomme); - int Controle(int direction); void Serpent(int direction, int segment, int tete_up, int tete_down, int tete_left, int tete_right, int serpent, int fond); void Update_Serpent(int direction, int segment, int tete_up, int tete_down, int tete_left, int tete_right, int serpent); long int Update_Vitesse(long int vitesse); int Update_Segment(int segment); - -void Terrain(); - -void Timer(unsigned long int suivant, unsigned long int old_seconde); +void CollisionTerrain(); +int Timer(unsigned long int suivant, int old_seconde); void Update_Timer(); void DessinerScene(int segment, int serpent, int pomme); int Score(int segment, int Nbr); void Collision(int segment); - void MenuDeFin(int Nbr); void MenuDebut(); void Attendre(long int microsecondes); diff --git a/JEUX_SERPENT/main.c b/JEUX_SERPENT/main.c index b1f69a3..139d562 100644 --- a/JEUX_SERPENT/main.c +++ b/JEUX_SERPENT/main.c @@ -2,27 +2,32 @@ #include #include #include "fonction.h" -#define CYCLE 100000L +#define CYCLE 10000L -unsigned long int old_seconde; -char timer[6]; - -int pos_x[2400], pos_y[2400], old_x[2400], old_y[2400]; - -int pommex[5], pommey[5]; -char score[4]; +/*variables gestion du timer*/ +unsigned long int suivant; +unsigned long int old_seconde=0; +/*variables pour gerer les menus + la pause*/ +int go_menu2=1; int go_on=1; int go_menu=1; int pause=1; -int go_menu2=1; -unsigned long int suivant; -int tete_up, tete_down, tete_right, tete_left, fond, pomme, serpent; +/*variables gestion score*/ int Nbr; + +/*variables gestion serpent + pomme*/ int segment=10; -int direction=4; /*1 : vers le haut, 2 : vers le bas, 3 vers la gauche, 4 vers la droite*/ +int tete_up, tete_down, tete_right, tete_left, fond, pomme, serpent; + +/*1 : vers le haut, 2 : vers le bas, 3 vers la gauche, 4 vers la droite*/ +int direction=4; + +/*vitesse d'acualisation du serpent*/ long int vitesse=100000; + +/*variables gestion input*/ int t; int t2; int t3; @@ -66,25 +71,21 @@ int main(){ EffacerEcran(CouleurParComposante(0,0,0)); DessinerScene(segment, serpent, pomme); suivant=Microsecondes()+CYCLE; - old_seconde=(suivant/1000000)%10; + old_seconde=(suivant/100000)%10; /*Boucle Principale du Programme*/ while(go_on){ direction = Controle(direction); - vitesse = Update_Vitesse(vitesse); - segment = Update_Segment(segment); - Nbr= Score(segment, Nbr); - - Controle(direction); if (pause==1){ - Timer(suivant, old_seconde); + old_seconde = Timer(suivant, old_seconde); Collision(segment); - Update_Vitesse(vitesse); - Update_Segment(segment); + vitesse = Update_Vitesse(vitesse); + segment = Update_Segment(segment); Serpent(direction, segment, tete_up, tete_down, tete_right, tete_left, serpent, fond); - Score(segment, Nbr); + Nbr = Score(segment, Nbr); Pomme(pomme); Attendre(vitesse); + CollisionTerrain(); } } diff --git a/JEUX_SERPENT/scene.c b/JEUX_SERPENT/scene.c index e4c3485..7596099 100644 --- a/JEUX_SERPENT/scene.c +++ b/JEUX_SERPENT/scene.c @@ -6,18 +6,21 @@ #define COLONNE 58 #define TAILLE_CASE 20 +/*variable position du seprent*/ +int pos_x[2400], pos_y[2400], old_x[2400], old_y[2400]; + +/*variables position des pommes*/ +int pommex[5], pommey[5]; + +/*variables pour créer le fond du jeu*/ int i,j,posx=20, posy=20; + +/*variables des boucles*/ int p=0; int i=0; int pp=0; -int imageMenu; -void Terrain(){ - if (pos_x[0] >1160 || pos_x[0]<20) - go_on=0; - if (pos_y[0]<20 || pos_y[0] >680) - go_on=0; -} +char timer2[6]; /*Fonction Pour créer la première scene du jeu*/ void DessinerScene(int segment, int serpent, int pomme){ @@ -36,10 +39,10 @@ void DessinerScene(int segment, int serpent, int pomme){ posy += TAILLE_CASE; posx = TAILLE_CASE; } - - snprintf(timer,6,"%02d:%02d", 0, 0); + + snprintf(timer2,6,"%02d:%02d", 0, 0); ChoisirCouleurDessin(CouleurParComposante(255,255,255)); - EcrireTexte(10,760,timer,2); + EcrireTexte(10,760,timer2,2); for (i = 0; i < segment; i++){ @@ -57,16 +60,6 @@ void DessinerScene(int segment, int serpent, int pomme){ } } -/*création du menu d'accueil*/ -void MenuDebut(){ - imageMenu=ChargerSprite("IMG/menu1.png"); - AfficherSprite(imageMenu,0,0); - ChoisirCouleurDessin(CouleurParComposante(255,255,255)); - /*EcrireTexte(450,100,"JEU DU SERPENT",2);*/ - EcrireTexte(410,650,"Appuyer sur Q pour quitter",2); - EcrireTexte(290,750,"Appuyer sur Fleche de Droite pour lancer le jeu",2); -} - /*Apparition aléatoire des pommes*/ void Pomme(int pomme){ for (pp = 0; pp < 5; ++pp) { @@ -74,3 +67,144 @@ void Pomme(int pomme){ } } + +/*Input Serpent*/ +int Controle(int direction){ + int t; + while(ToucheEnAttente()){ + t = Touche(); + switch(t){ + case XK_Left : + if (direction != 4){ + direction=3; + } + break; + case XK_Right: + if (direction != 3){ + direction=4; + } + break; + case XK_Up: + if(direction !=2){ + direction=1; + } + break; + case XK_Down: + if (direction !=1){ + direction=2; + } + break; + case XK_Escape: + go_on=0; + go_menu=0; + break; + case XK_space: + if (pause==0){ + pause=1; + }else{ + pause=0; + ChoisirCouleurDessin(CouleurParComposante(255,255,255)); + EcrireTexte(500,750,"Jeu en Pause",2); + } + break; + } + } + return direction; +} + +/*Avancement automatique du serpent en fonction de la direction*/ +void Serpent(int direction, int segment, int tete_up, int tete_down, int tete_left, int tete_right, int serpent, int fond){ + if (direction == 1){ + pos_y[0]=old_y[0]-20; + } + if (direction == 2){ + pos_y[0]=old_y[0]+20; + } + if (direction == 3){ + pos_x[0]=old_x[0]-20; + } + if (direction == 4){ + pos_x[0]=old_x[0]+20; + } + AfficherSprite(fond, pos_x[segment-1], pos_y[segment-1]); + Update_Serpent(direction, segment, tete_up, tete_down, tete_right, tete_left, serpent); +} + +/*augmentation de la vitesse en fonction des pommes mangées*/ +long int Update_Vitesse(long int vitesse){ + int p=0; + for(p=0; p<5; p++){ + if(pommex[p]==pos_x[0] && pommey[p]==pos_y[0]){ + if (vitesse>20000){ + vitesse=vitesse-1500; + } + } + } + return vitesse; +} + +int Update_Segment(int segment){ + int p=0; + for(p=0; p<5; p++){ + if(pommex[p]==pos_x[0] && pommey[p]==pos_y[0]){ + segment=segment+2; + pommex[p] = ((rand() % (58)+1)*20); + pommey[p] = ((rand() % (34)+1)*20); + } + } + return segment; +} + +/*fonction pour mettre à jour la position du serpent*/ +void Update_Serpent(int direction, int segment, int tete_up, int tete_down, int tete_left, int tete_right, int serpent){ + + /*affichage de la tete en fonction de la direction du serpent*/ + if (direction==1){ + AfficherSprite(tete_up, pos_x[0], pos_y[0]); + } + if (direction==2){ + AfficherSprite(tete_down, pos_x[0], pos_y[0]); + } + if (direction==3){ + AfficherSprite(tete_left, pos_x[0], pos_y[0]); + } + if (direction==4){ + AfficherSprite(tete_right, pos_x[0], pos_y[0]); + } + + /*affichage du reste du corps*/ + for (i=1 ; i1160 || pos_x[0]<20) + go_on=0; + if (pos_y[0]<20 || pos_y[0] >680) + go_on=0; +} diff --git a/JEUX_SERPENT/timer_score_menu.c b/JEUX_SERPENT/timer_score_menu.c index 31e3cbf..571f1a4 100644 --- a/JEUX_SERPENT/timer_score_menu.c +++ b/JEUX_SERPENT/timer_score_menu.c @@ -2,13 +2,16 @@ #include #include #include "fonction.h" -#define CYCLE 100000L +#define CYCLE 10000L int seconde=0, minute=0, seconde_actuel=0; int imageMenuFin; +int imageMenuDebut; +char timer[6]; +char score[4]; /*Fonction pour calculer le temps*/ -void Timer(unsigned long int suivant, unsigned long int old_seconde){ +int Timer(unsigned long int suivant, int old_seconde){ if(Microsecondes()> suivant){ suivant = Microsecondes()+CYCLE; seconde_actuel = (suivant/1000000)%10; @@ -17,13 +20,13 @@ void Timer(unsigned long int suivant, unsigned long int old_seconde){ if(seconde == 59){ minute=minute+1; seconde=0; - Update_Timer(); }else{ seconde = seconde+1; - Update_Timer(); } } } + Update_Timer(); + return old_seconde; } /*Fonction pour mettre à jour unuquement le timer*/ @@ -54,4 +57,25 @@ void MenuDeFin(int Nbr){ snprintf(timer,14,"Temps : %02d:%02d", minute, seconde); EcrireTexte(490,700,timer,2); EcrireTexte(410,750,"Appuyer sur Q pour quitter",2); +} + +/*création du menu d'accueil*/ +void MenuDebut(){ + imageMenuDebut=ChargerSprite("IMG/menu1.png"); + AfficherSprite(imageMenuDebut,0,0); + ChoisirCouleurDessin(CouleurParComposante(255,255,255)); + EcrireTexte(410,650,"Appuyer sur Q pour quitter",2); + EcrireTexte(290,750,"Appuyer sur Fleche de Droite pour lancer le jeu",2); +} + +/*fonction pour afficher + calculer le score*/ +int Score(int segment, int Nbr){ + Nbr=(segment-10)*2.5; + snprintf(score,5,"%04d", Nbr); + ChoisirCouleurDessin(CouleurParComposante(0,0,0)); + RemplirRectangle(1100,730,1200,800); + ChoisirCouleurDessin(CouleurParComposante(255,255,255)); + EcrireTexte(1000,750,"Score :",2); + EcrireTexte(1100,750,score,2); + return Nbr; } \ No newline at end of file