From b637d047c921f59e34ce4a300df110a11b8530ce Mon Sep 17 00:00:00 2001
From: Vince <vi.teissier@gmail.com>
Date: Sat, 2 Dec 2023 10:05:42 +0100
Subject: [PATCH] =?UTF-8?q?Repartitions=20du=20code=20en=20plusieurs=20fic?=
 =?UTF-8?q?hier=20(d=C3=A9but=20du=20vrai=20programme)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Makefile    |   0
 evenement.c |  91 ++++++++++++++++++++++++++++++++
 evenement.h |   6 +++
 graph.h     | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 main.c      |  92 ++++----------------------------
 main.h      |  11 ++++
 makefile    |  16 ++++++
 prog        | Bin 17152 -> 17192 bytes
 8 files changed, 283 insertions(+), 82 deletions(-)
 create mode 100644 Makefile
 create mode 100644 evenement.c
 create mode 100644 evenement.h
 create mode 100644 graph.h
 create mode 100644 main.h
 create mode 100644 makefile

diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..e69de29
diff --git a/evenement.c b/evenement.c
new file mode 100644
index 0000000..a3cf5e9
--- /dev/null
+++ b/evenement.c
@@ -0,0 +1,91 @@
+#include <graph.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "main.h"
+
+
+void AfficherTimerEtScore(int m,int n,int score)   /*Afficher le temps passé et le score*/
+{   
+    char buf[100];
+    char buff[100];
+    couleur j;
+    j=CouleurParNom("yellow");
+    ChoisirCouleurDessin(j);
+
+	ChoisirEcran(1);
+	CopierZone(2,1,0,0,930,710,0,0);
+	snprintf(buf,100,"temps : %02d:%02d",m,n);
+    snprintf(buff,100,"SCORE : %07d",score);
+	EcrireTexte(60,650,buf,2);
+    EcrireTexte(600,650,buff,2);
+	CopierZone(1,0,0,0,930,710,0,0);
+}
+
+
+void MangerPastille(int *serpent, int* pastilles, int longueur_serpent, int longueur_pastilles)
+    {
+        int i = 0;
+
+        for(i=0;i<longueur_pastilles;i+=2)
+        {
+            if(serpent[0] == pastilles[i] && serpent[1] == pastilles[i+1])
+            {
+                
+            }
+        }
+        
+    }
+
+void DeplacementSerpent(int direction ,int *serpent, int longueur)
+{
+    int tempX = serpent[0];
+    int tempY = serpent[1];
+    int i;
+    couleur g;
+    couleur j;
+    ChoisirEcran(2);
+    j=CouleurParNom("yellow");
+    g=CouleurParNom("lightgreen");
+
+    ChoisirCouleurDessin(g);
+    RemplirRectangle(serpent[longueur-2],serpent[longueur-1],T_PIXEL,T_PIXEL);
+
+    for (i = 2; i < longueur; i += 2) {
+        int tempX2 = serpent[i];
+        int tempY2 = serpent[i + 1];
+
+        serpent[i] = tempX;
+        serpent[i + 1] = tempY;
+
+        tempX = tempX2;
+        tempY = tempY2;
+    }
+
+    ChoisirCouleurDessin(j);
+    if(direction == 0) /* Direction vers la gauche */
+    {
+        printf("Gauche %d\n",direction);
+        serpent[0]-=T_PIXEL;
+        
+        RemplirRectangle(serpent[0],serpent[1],T_PIXEL,T_PIXEL);
+        printf("Longueur = %d | x %d | y %d",longueur,serpent[longueur-1],serpent[longueur-2]);
+    }
+    else if(direction == 1) /* Direction vers le haut */
+    {
+        printf("Haut %d\n",direction);
+        serpent[1]-=T_PIXEL;
+        RemplirRectangle(serpent[0],serpent[1],T_PIXEL,T_PIXEL);
+    }
+    else if(direction == 2) /* Direction vers la droite */
+    {
+        printf("Droite %d\n",direction);
+        serpent[0]+=T_PIXEL;
+        RemplirRectangle(serpent[0],serpent[1],T_PIXEL,T_PIXEL);
+    }
+    else if(direction == 3) /* Direction vers le bas */
+    {
+        printf("Bas %d\n",direction);
+        serpent[1]+=T_PIXEL;
+        RemplirRectangle(serpent[0],serpent[1],T_PIXEL,T_PIXEL);
+    }
+}
\ No newline at end of file
diff --git a/evenement.h b/evenement.h
new file mode 100644
index 0000000..274b155
--- /dev/null
+++ b/evenement.h
@@ -0,0 +1,6 @@
+
+void AfficherTimerEtScore(int m,int n,int score);
+
+void MangerPastille(int *serpent, int* pastilles, int longueur_serpent, int longueur_pastilles);
+
+void DeplacementSerpent(int direction ,int *serpent, int longueur);
\ No newline at end of file
diff --git a/graph.h b/graph.h
new file mode 100644
index 0000000..8244e09
--- /dev/null
+++ b/graph.h
@@ -0,0 +1,149 @@
+#ifndef _GRAPH_H
+#define _GRAPH_H
+
+#include<X11/Xlib.h>
+#include<X11/Xutil.h>
+#include<X11/keysym.h>
+
+extern int _X;
+extern int _Y;
+
+#define NB_PIXMAP 10
+
+typedef unsigned long couleur;
+typedef XPoint Point;
+
+int InitialiserGraphique();
+/* initialise le mode graphique : renvoie 1 en cas de succes, 0 sinon */
+
+int CreerFenetre(int posx,int posy,int X,int Y);
+/* creer la fenetre graphique de largeur X et longueur Y, et la positionne
+   sur l'ecran au point (posx,posy). Une seule fenetre autoris�e */
+
+void ChoisirTitreFenetre(char *s);
+/* change le titre de la fenetre */
+
+void ChoisirCurseur(unsigned int forme);
+/* change le curseur de la fenetre */
+
+void CacherFenetre(void);
+/* cache la fenetre */
+
+void AfficherFenetre(void);
+/* affiche la fenetre */
+
+void ChoisirEcran(int n);
+/* fixe l'ecran ou le dessin est effectue : cette ecran est soit 0 (la fenetre
+   visible, ecran par defaut au demarrage), soit le numero de l'�cran  virtuel correspondant */
+
+void ChoisirCouleurDessin(couleur c);
+/* fixe la couleur qui sert au dessin */
+
+couleur CouleurParNom(char * nom);
+/* fait la traduction d'une couleur a partir de son nom : le fichier rgb.txt
+   contient la liste des couleurs accessibles via leur nom */
+
+couleur CouleurParComposante(unsigned char r, unsigned char v,unsigned char b); 
+/* renvoie la couleur d�finie par ses trois composantes */
+
+int Maxx();
+/* renvoie la largeur de l'ecran : il faut que le mode graphique ait �t� 
+   initialise !!! */
+
+int Maxy();
+/* renvoie la hauteur de l'ecran : il faut que le mode graphique ait �t� 
+   initialise !!! */
+
+void DessinerPixel(int x,int y);
+/* allume un pixel avec la couleur de dessin */
+
+void DessinerSegment(int x,int y,int xx,int yy);
+/* idem precedent, mais avec la couleur de dessin */
+
+void DessinerSegments(Point * sommets,int nb_sommets);
+/* trace pour chaque paire sommet[i],sommet[i+1] le segment correspondant. Si le deux extr�mit�s correspondent, le polygone est ferm� */
+
+void DessinerRectangle(int x,int y,int l,int h);
+/* idem, mais utilise la couleur de dessin */
+
+void RemplirRectangle(int x,int y,int l,int h);
+/* trace un rectangle plein, rempli avec c */
+
+void DessinerArc(int x,int y,int l,int h,int angle1,int angle2);
+/* idem, mais utilise la couleur de dessin */
+
+void RemplirArc(int x,int y,int l,int h,int angle1,int angle2);
+/* trace un arc plein avec c */
+
+void RemplirTriangle(int x,int y,int xx,int yy,int xxx,int yyy);
+/* trace un triangle plein */
+
+void RemplirPolygone(Point * sommets,int nb_sommet);
+/* Trace un polygone plein d�fini par son tableau de sommets. Si les extremit�s ne coincident pas, le polygone est ferm� automatiquement.
+*/
+
+int ToucheEnAttente();
+/* renvoie 1 si une touche a �t� enfonc�e, 0 sinon */
+
+KeySym Touche();
+/* renvoie la premiere touche du tampon : cette fonction est bloquante => 
+   utiliser ToucheEnAttente  pour la rendre non bloquante */
+
+void EcrireTexte(int x,int y,char *texte,int taille);
+/* ecrit la chaine texte au point (x,y) : taille indique la taille (0<->petit,1<->moyen,2<->grand) */
+#ifdef HAVE_XPM
+void SauverImage(char * file,int x,int y,int l,int h);
+/* sauvegarde d'une partie de la fenetre (x,y,x+l,y+h) au format xpm */
+#endif
+
+int ChargerImage(char *file,int x,int y,int xx,int yy,int l,int h);
+/* charge une partie (xx,yy,xx+l,yy+h) d'image au format xpm dans 
+la fenetre a la position (x,y) */
+
+void ChargerImageFond(char *file);
+/* charge une image qui remplit le fond de la fen\^etre, en la r\'ep\'etant si necessaire */
+
+void EffacerEcran(couleur c);
+/* efface l'ecran avec la couleur c*/
+
+void ChoisirModeDessin(int m);
+/* fixe le mode d'affichage : 0<->ecrasement 1<->xor */
+
+int TailleChaineEcran(char *t,int taile);
+/* renvoie, en pixel, la taille horizontale occupee par la chaine � l'�cran :taille est la taille de la police (0,1,2) */
+
+int TailleSupPolice(int taille);
+/* renvoie la taiile maximale de la police, en pixel, au dessus de la ligne d'�criture */
+
+int TailleInfPolice(int taille);
+/* renvoie la taille maximale de la police, en pixel, en dessous de la ligne d'�criture */
+
+void CopierZone(int src,int dst,int ox,int oy,int L,int H,int dx,int dy);
+/* copie une zone de l'�cran vers l'�cran dst. La zone copi�e est le rectangle delimite par le coin superieure hauche (ox,oy) et sa largeur l et hauteur h. Cette zone est copi� au point (dx,dy) de l'ecran dst */ 
+
+void FermerGraphique();
+/* fermeture du mode graphique */
+
+unsigned long Microsecondes();
+/* renvoie le nombre de microsecondes ecoul�es depuis le
+lancement du programme */
+
+void SourisPosition();
+/* recupere les coordonnees de la souris dans la fenetre et les place dans _X et _Y*/
+
+int SourisCliquee();
+/* indique un clic de souris (1 si oui, 0 sinon), et recupere si c'est le cas la position au moment du clic dans _X et _Y */
+
+
+/* fonctions a r��crire proprement */
+
+int ChargerSprite(char *file);
+/* charge un srpite en m�moire, et renvoie son num�ro 
+ * -1 en cas d'echec */
+void AfficherSprite(int n,int x,int y);
+/* affiche le sprite correspondant � son num�ro */
+void LibererSprite(int n);
+/* libere les ressources associ�es au sprite
+ * n */
+
+#endif
diff --git a/main.c b/main.c
index 289aa91..c9710cb 100644
--- a/main.c
+++ b/main.c
@@ -2,6 +2,8 @@
 #include <stdio.h>
 #include <graph.h>
 #include <time.h>
+#include "evenement.h"
+
 
 #define W_WINDOW 930 /* Largeur de la fenêtre*/
 #define H_WINDOW 710 /* Hauteur de la fenêtre*/
@@ -15,82 +17,6 @@
 
 #define delta 100000L
 
-
-void Affichertimeretscore(int m,int n,int score)   /*Afficher le temps passé et le score*/
-{   
-    char buf[100];
-    char buff[100];
-    couleur j;
-    j=CouleurParNom("yellow");
-    ChoisirCouleurDessin(j);
-
-	ChoisirEcran(1);
-	CopierZone(2,1,0,0,930,710,0,0);
-	snprintf(buf,100,"temps : %02d:%02d",m,n);
-    snprintf(buff,100,"SCORE : %07d",score);
-	EcrireTexte(60,650,buf,2);
-    EcrireTexte(600,650,buff,2);
-	CopierZone(1,0,0,0,930,710,0,0);
-}
-void grandirserpent(int *serpent)
-    {
-
-    }
-
-void DeplacementSerpent(int direction ,int *serpent, int longueur)
-{
-    int tempX = serpent[0];
-    int tempY = serpent[1];
-    int i;
-    couleur g;
-    couleur j;
-    ChoisirEcran(2);
-    j=CouleurParNom("yellow");
-    g=CouleurParNom("lightgreen");
-
-    ChoisirCouleurDessin(g);
-    RemplirRectangle(serpent[longueur-2],serpent[longueur-1],T_PIXEL,T_PIXEL);
-
-    for (i = 2; i < longueur; i += 2) {
-        int tempX2 = serpent[i];
-        int tempY2 = serpent[i + 1];
-
-        serpent[i] = tempX;
-        serpent[i + 1] = tempY;
-
-        tempX = tempX2;
-        tempY = tempY2;
-    }
-
-    ChoisirCouleurDessin(j);
-    if(direction == 0) /* Direction vers la gauche */
-    {
-        printf("Gauche %d\n",direction);
-        serpent[0]-=T_PIXEL;
-        
-        RemplirRectangle(serpent[0],serpent[1],T_PIXEL,T_PIXEL);
-        printf("Longueur = %d | x %d | y %d",longueur,serpent[longueur-1],serpent[longueur-2]);
-    }
-    else if(direction == 1) /* Direction vers le haut */
-    {
-        printf("Haut %d\n",direction);
-        serpent[1]-=T_PIXEL;
-        RemplirRectangle(serpent[0],serpent[1],T_PIXEL,T_PIXEL);
-    }
-    else if(direction == 2) /* Direction vers la droite */
-    {
-        printf("Droite %d\n",direction);
-        serpent[0]+=T_PIXEL;
-        RemplirRectangle(serpent[0],serpent[1],T_PIXEL,T_PIXEL);
-    }
-    else if(direction == 3) /* Direction vers le bas */
-    {
-        printf("Bas %d\n",direction);
-        serpent[1]+=T_PIXEL;
-        RemplirRectangle(serpent[0],serpent[1],T_PIXEL,T_PIXEL);
-    }
-}
-
 int ArrondirPixel(int nombre) /* Calcule un arrondi du pixel pour pouvoir respecter la norme des 40 lignes et 60 colonnes */
 {
     /* Calcul du reste de la division par 15 */
@@ -102,7 +28,7 @@ int ArrondirPixel(int nombre) /* Calcule un arrondi du pixel pour pouvoir respec
     return arrondi;
 }
 
-void gen_pastille(int nb_pastille, int *p_pastilles) /* Ajout des pointeurs pour le futur tableau de pastilles  */ 
+void gen_pastille(int nb_pastille, int *p_pastilles)
 
                                    /* nb_pastille = int nombre de pastille voulue , p_pastilles est un pointeur d'un tableau de pixels qui sont des pastilles*/
                                    /*Générer une pastille dans la grid*/
@@ -243,7 +169,7 @@ int main()
                 direction = 3;
                 if(direction_davant == 1 && direction == 3)
                 {
-                    direction = direction_davant;
+                    direction = direction_davant;               /* Changements de direction du serpent*/
                 }
                 break;
             case XK_Left:
@@ -260,12 +186,12 @@ int main()
                     direction = direction_davant;
                 }
                 break;
-                
+
             case XK_space:
                 if(pause == 0)
                 { 
                     pause = 1 ;
-                } 
+                }                                   /* Faire pause */
                 else if(pause == 1) 
                 { 
                     pause = 0;
@@ -290,9 +216,11 @@ int main()
                         n=0;
                     }
 
-                Affichertimeretscore(m,n,score);
+                AfficherTimerEtScore(m,n,score);
                 suivant=Microsecondes()+delta;
-                direction_davant = direction;
+
+                direction_davant = direction; /* Check si le serpent à le droit de changer de direction */
+                MangerPastille(serpent,pastilles,longueur_serpent,longueur_pastilles);
                 DeplacementSerpent(direction,serpent,longueur_serpent);
                
 			
diff --git a/main.h b/main.h
new file mode 100644
index 0000000..6adf711
--- /dev/null
+++ b/main.h
@@ -0,0 +1,11 @@
+#ifndef MAIN_H
+#define MAIN_H
+
+#define W_WINDOW 930
+#define H_WINDOW 710
+#define W_GAME 900
+#define H_GAME 600
+#define T_PIXEL 15
+#define DECALEMENT 30
+
+#endif
\ No newline at end of file
diff --git a/makefile b/makefile
new file mode 100644
index 0000000..8613644
--- /dev/null
+++ b/makefile
@@ -0,0 +1,16 @@
+CC = gcc
+CFLAGS = -Wall -Wextra
+
+all: prog
+
+prog: main.o evenement.o
+	$(CC) -ansi -pedantic -o $@ $^ -lgraph
+
+main.o: main.c evenement.h
+	$(CC) $(CFLAGS) -c $< -o $@
+
+evenement.o: evenement.c evenement.h
+	$(CC) $(CFLAGS) -c $< -o $@
+
+clean:
+	rm -f *.o prog
diff --git a/prog b/prog
index c91a7e76b98beff7886539a6e017bb1dcccf25e5..9d969cf13f3d8f96c738d88d8c60be4e00941d70 100755
GIT binary patch
delta 2584
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
Nno7f;Mc!3;{{hMKV`TsU

delta 2540
zcmZuyYfMx}6uxtJsVqKV0oh%7?P@71%EJesv=z{+S6gGWty<p?P%-#I@EIydP}kKK
zJ=LmBQ`;Yv+BRx7wrZ>>Sj7ZwOpF?vrnG9aSXx0v7esHrnY)Y7I>|j}=A84L^Uche
z-O4SjWDBe4&oXxn_|3FFSQ2ABnOTzQj;yclxW}_3X7<?iWrrrGd_Vluy@tB$$?uO{
zGb?GsnCx-4md>b2bnh@636=+%=#8*zlpUEcu(rD-sm_ZY?=wwPo#j>y%B3q<AHZ70
zklbT^PM<`^%afkb*+|ETnLwS%fgR8jytXF@k*+;P4&SL%IIpTZd#nEoy4y~DqN1WL
zycVKP@?EIT>NDFhshSSqX>UiFXj&N+ltAr>Dmx!ip}G`rj+$VM>yPll0M7)#FV#E@
zj%j;Ob>3B-#a^n58ZzuUkKY+EElA(cR=#v9O)xF>nF@82mnY<VE^MbE(HZigr?eva
z)3^gqHLa|;P6{q3)Nv_w&I`aUGj-bJjW$Y(NtAzRqq#AuLk*o>3)(cT!HA<m3RX1L
z4}Tii3I1jq)yAaC5pBC;dk0r`_WaRGuf`_!t8Ue_zosFBp=h!{!-CFnyIQFzHnm$G
z;wmoHkSTms@^{_z{c;=j>#YKL$&&y&*x@x8FDj3?sbMh4c^<aX;qVmsY%Bd5e*E?Q
zuXJK}`U&ou--u_k7pZ(_G!}DLQIkt)Jjpxo6c<SR`4hU*JJFHEBX<T|570T(BL(N+
z2iHHL=m?9P_JmR+l=11ls3rf2;_Hh_Q#JU3>mVqdMhWb$qDL;JsY~gvAJh4W%dxjw
za9xT=E-Utg27joC#tYbM)QSAvLPsr`{oc`+dWX&tfJOis!#+4#g`SW+hg&GjIx%7+
zT%uQ8ibp+HFZ1SD+(K)tF`Lr*@r>tAIS_sZ)Ff>88-rfu7r;(%Tf+>Tn_5=vm5K(d
zt^mVJFl&97LmimcfYF(`A8Fdj3s|1|5>aP3Go9Yjmhs|zXZygBoTu+%zUR%1v*BDr
z@FE&GJ3Zfd<SX;C;BrfcsreDjvi&)F4Ce{J<c9!!i#inzUkQ0o$OA%t3|UfKg@>>m
zGd*Q8QmP}Ao2xgFvyU?89+tY}1~RDu2e&ZfRc^YJTBlM6TJ_Fq)in`qQ>!|!pkVxC
z{<y9oXZmwLv<ILf$)y^Jzh<?pF%S<vu!gR7-@4l#NG0~dgo4~0X`OwfJub(dVP7vM
zK~mP5`O6FKQvbM|L2wMPgC+)zvS)2#k%o+XEPCKezprTrp-(hvS}k-fbUk$X15Mio
z?EnEUbP0B2#Zi3(oeo`q#+wd(8G0S`B)p=1(8r-qK$qf|;wCg7;kuI8hA9$T7eXr>
zW>!h14hyTG{f>C%p>qz)rg|`0=|gZp6uuq!9AGk++m&7+TjbF_UolK&J-P)7Kfj)N
zU?_h0{r<7stK;jSC&7OkclrW<OZMX%VGhNy&y=K1F9PH#A_FJT1BE9dU~?A&>pKYW
zmv{t6un4go1?1Ts__yJ2fxoT`zNQ185BnE5GTC76l)%u+8M>SM1_setIh0xljbr)l
ztiiEH+Lmmkc`3#KhEuJl{VDM&r+H~9O!EJ+i6z9(_?Tps0!R5Ry1q-zDHdBePQ)(R
zBq_72mr=99!v3LBqlIZgh6{_8N{3i%v7j3&g-FM(I!YW1ri19%5DUxTk+jcfwaw>o
zvRTTH?V5eD$hDEoLzCD6F|QQzM<FlsEVc$<&8Px;V&L~l3@`Uahk|#=OL)h^-j|Na
zVQeI&470EaLQbRk!z{Li@Nw2@ee_J?vM^o6V^YfDHOn?BFjM#X<!&EphHtOv5it&O
zl<knuYw|U>=ur4iQ!}d9it4vTWQ#9yNpBr5dKFV69UE?8W|}<QGCl%7UYy})K8B)Q
z5R>S$uk~R?AH$vnyIJZZ*)y@g;Qh|WyCUZuQGGG}j{M7o#U<o^E^UW>IrDgbW5`(Z
zafDW-{^ZV1Tg9k4eOp-8qD6TNm*f@{<}J%D$SqvGa76*BBQkm|E||YOC$C_2Zo$gj
z<%P6)#9sH{k!zW|GNazW-XiCyB$NNv^Xc5Ead_RP%p{Y)J3W+@nP!^q&}&Y2mu7a8
gdnV&QmXBzBp|mGE!L%|}7^LHLDLakD5gQ%<FLSRyC;$Ke