Repartitions du code en plusieurs fichier (début du vrai programme)
This commit is contained in:
parent
e34d6fb72b
commit
b637d047c9
0
Makefile
Normal file
0
Makefile
Normal file
91
evenement.c
Normal file
91
evenement.c
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
6
evenement.h
Normal file
6
evenement.h
Normal file
@ -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);
|
149
graph.h
Normal file
149
graph.h
Normal file
@ -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
|
92
main.c
92
main.c
@ -2,6 +2,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <graph.h>
|
#include <graph.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include "evenement.h"
|
||||||
|
|
||||||
|
|
||||||
#define W_WINDOW 930 /* Largeur de la fenêtre*/
|
#define W_WINDOW 930 /* Largeur de la fenêtre*/
|
||||||
#define H_WINDOW 710 /* Hauteur de la fenêtre*/
|
#define H_WINDOW 710 /* Hauteur de la fenêtre*/
|
||||||
@ -15,82 +17,6 @@
|
|||||||
|
|
||||||
#define delta 100000L
|
#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 */
|
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 */
|
/* 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;
|
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*/
|
/* 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*/
|
/*Générer une pastille dans la grid*/
|
||||||
@ -243,7 +169,7 @@ int main()
|
|||||||
direction = 3;
|
direction = 3;
|
||||||
if(direction_davant == 1 && direction == 3)
|
if(direction_davant == 1 && direction == 3)
|
||||||
{
|
{
|
||||||
direction = direction_davant;
|
direction = direction_davant; /* Changements de direction du serpent*/
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case XK_Left:
|
case XK_Left:
|
||||||
@ -260,12 +186,12 @@ int main()
|
|||||||
direction = direction_davant;
|
direction = direction_davant;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XK_space:
|
case XK_space:
|
||||||
if(pause == 0)
|
if(pause == 0)
|
||||||
{
|
{
|
||||||
pause = 1 ;
|
pause = 1 ;
|
||||||
}
|
} /* Faire pause */
|
||||||
else if(pause == 1)
|
else if(pause == 1)
|
||||||
{
|
{
|
||||||
pause = 0;
|
pause = 0;
|
||||||
@ -290,9 +216,11 @@ int main()
|
|||||||
n=0;
|
n=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Affichertimeretscore(m,n,score);
|
AfficherTimerEtScore(m,n,score);
|
||||||
suivant=Microsecondes()+delta;
|
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);
|
DeplacementSerpent(direction,serpent,longueur_serpent);
|
||||||
|
|
||||||
|
|
||||||
|
11
main.h
Normal file
11
main.h
Normal file
@ -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
|
16
makefile
Normal file
16
makefile
Normal file
@ -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
|
BIN
prog
BIN
prog
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user