diff --git a/SAE_semestre1/Makefile b/SAE_semestre1/Makefile index 65660a3..fbfab30 100644 --- a/SAE_semestre1/Makefile +++ b/SAE_semestre1/Makefile @@ -1,15 +1,25 @@ -but : jeux -OFILES = terrain.o \ - time.o + + CC = gcc CFLAGS = -ansi -pedantic -lgraph -g +SRCDIR = ./src +HDIR = ./fichier.h +ODIR = ./out +OFILES = $(subst src/,out/,$(subst .c,.o,$(shell find $(SRCDIR)/ -type f))) +EXE = snake -terrain.o = terrain.c -time.o = time.c +but : $(EXE) -jeux : $(OFILES) - $(CC) $(CFLAGS) -o jeux $(OFILES) +$(ODIR)/%.o : $(SRCDIR)/%.c + @mkdir -p $(@D) + $(CC) -c $< -o $@ -clean : -rm -f $(OFILES) jeux +$(EXE) : $(OFILES) + $(CC) $(CFLAGS) -o $(EXE) $(OFILES) + +run : $(EXE) + ./$(EXE) + +clean : -rm -f $(OFILES) snake .PHONY : but clean diff --git a/SAE_semestre1/fichier.h/controle.h b/SAE_semestre1/fichier.h/controle.h new file mode 100644 index 0000000..6818f0d --- /dev/null +++ b/SAE_semestre1/fichier.h/controle.h @@ -0,0 +1,6 @@ +#ifndef CONTROLE_H +#define CONTROLE_H + +void Controle(); + +#endif \ No newline at end of file diff --git a/SAE_semestre1/fichier.h/fonctions.h b/SAE_semestre1/fichier.h/fonctions.h new file mode 100644 index 0000000..209efff --- /dev/null +++ b/SAE_semestre1/fichier.h/fonctions.h @@ -0,0 +1,5 @@ +#ifndef FONCTIONS_H +#define FONCTIONS_H + + +#endif \ No newline at end of file diff --git a/SAE_semestre1/fichier.h/main.h b/SAE_semestre1/fichier.h/main.h new file mode 100644 index 0000000..8b01770 --- /dev/null +++ b/SAE_semestre1/fichier.h/main.h @@ -0,0 +1,5 @@ +#ifndef MAIN_H +#define MAIN_H + + +#endif \ No newline at end of file diff --git a/SAE_semestre1/fichier.h/menu.h b/SAE_semestre1/fichier.h/menu.h new file mode 100644 index 0000000..3baceef --- /dev/null +++ b/SAE_semestre1/fichier.h/menu.h @@ -0,0 +1,5 @@ +#ifndef MENU_H +#define MENU_H + + +#endif \ No newline at end of file diff --git a/SAE_semestre1/fichier.h/pastille.h b/SAE_semestre1/fichier.h/pastille.h new file mode 100644 index 0000000..9316f1e --- /dev/null +++ b/SAE_semestre1/fichier.h/pastille.h @@ -0,0 +1,5 @@ +#ifndef PASTILLE_H +#define PASTILLE_H + + +#endif \ No newline at end of file diff --git a/SAE_semestre1/fichier.h/serpent.h b/SAE_semestre1/fichier.h/serpent.h new file mode 100644 index 0000000..f209fc7 --- /dev/null +++ b/SAE_semestre1/fichier.h/serpent.h @@ -0,0 +1,5 @@ +#ifndef SERPENT_H +#define SERPENT_H + + +#endif \ No newline at end of file diff --git a/SAE_semestre1/fichier.h/time.h b/SAE_semestre1/fichier.h/time.h new file mode 100644 index 0000000..e5228cd --- /dev/null +++ b/SAE_semestre1/fichier.h/time.h @@ -0,0 +1,7 @@ +#ifndef TIME_H +#define TIME_H +#define CYCLE 10000L + +void Timer(unsigned long int suivant); + +#endif TIME_H \ No newline at end of file diff --git a/SAE_semestre1/fonctions.h b/SAE_semestre1/fonctions.h deleted file mode 100644 index 724b2cb..0000000 --- a/SAE_semestre1/fonctions.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef fonctions.h -#define fonctions.h - -/*Variables fichier terrain.c*/ - void variables(){ - int j; - int i; - } - #endif \ No newline at end of file diff --git a/SAE_semestre1/img/jeu-snake.jpg b/SAE_semestre1/img/jeu-snake.jpg new file mode 100644 index 0000000..1526dc2 Binary files /dev/null and b/SAE_semestre1/img/jeu-snake.jpg differ diff --git a/SAE_semestre1/img/serpent.png b/SAE_semestre1/img/serpent.png new file mode 100644 index 0000000..f228445 Binary files /dev/null and b/SAE_semestre1/img/serpent.png differ diff --git a/SAE_semestre1/main.c b/SAE_semestre1/main.c deleted file mode 100644 index 1f632f6..0000000 --- a/SAE_semestre1/main.c +++ /dev/null @@ -1,237 +0,0 @@ -#include -#include -#include - - -#define CORP_SNAKE '-' -#define TETE_SNAKE 'B' -#define DU_MANGER '*' -#define CASE_VIDE ' ' - - -char ** grille = NULL; -int nbLignes = 0; -int nbColonnes = 0; -int modeEvolueDansLequelLeSerpentPeutPasserATraversLesMursEtCeSansAvoirMalDuToutCeQuiEstTresPratiqueCarCaPermetDeJouerPlusLongtemps = 0; - -struct uneCellule { - int ligne; - int colonne; - struct uneCellule * suiv; -}; -typedef struct uneCellule uneCellule; - -struct unSnake { - uneCellule * teteSnake; - uneCellule * queueSnake; -}; -typedef struct unSnake unSnake; - -struct uneDirection { - int ligne; - int colonne; -}; -typedef struct uneDirection uneDirection; - -unSnake creerSnake() { - - unSnake snake; - - uneCellule * teteSnake = malloc(sizeof(uneCellule)); - uneCellule * queueSnake = malloc(sizeof(uneCellule)); - uneCellule * milieuSnake = malloc(sizeof(uneCellule)); - - teteSnake->ligne = 1; - teteSnake->colonne = 4; - teteSnake->suiv = NULL; - - milieuSnake->ligne = 1; - milieuSnake->colonne = 3; - milieuSnake->suiv = teteSnake; - - queueSnake->ligne = 1; - queueSnake->colonne = 2; - queueSnake->suiv = milieuSnake; - - snake.teteSnake = teteSnake; - snake.queueSnake = queueSnake; - - return snake; -} - -void ajouterEnTete (unSnake * snake, int ligne, int colonne,int * aMange, int * fail) { - uneCellule * nouvelleTete = malloc (sizeof(uneCellule)); - - nouvelleTete->ligne = ligne; - nouvelleTete->colonne = colonne; - nouvelleTete->suiv = NULL; - - snake->teteSnake->suiv = nouvelleTete; - grille[(snake->teteSnake->ligne)][(snake->teteSnake->colonne)] = CORP_SNAKE; - snake->teteSnake = snake->teteSnake->suiv; - - if ( modeEvolueDansLequelLeSerpentPeutPasserATraversLesMursEtCeSansAvoirMalDuToutCeQuiEstTresPratiqueCarCaPermetDeJouerPlusLongtemps) { - if( snake->teteSnake->ligne < 0) { - snake->teteSnake->ligne = nbLignes - 1; - } - - else if( snake->teteSnake->ligne > nbLignes-1) { - snake->teteSnake->ligne = 0; - } - else if (snake->teteSnake->colonne < 0) { - snake->teteSnake->colonne = nbColonnes - 1; - } - else if ( snake->teteSnake->colonne > nbColonnes-1) { - snake->teteSnake->colonne = 0; - } - else if (grille[snake->teteSnake->ligne][snake->teteSnake->colonne] == CORP_SNAKE) { - *fail = 1; - } - } - else { - if( snake->teteSnake->ligne < 0 || - snake->teteSnake->ligne > nbLignes-1 || - snake->teteSnake->colonne < 0 || - snake->teteSnake->colonne > nbColonnes-1) - *fail = 1; - } - - - if(!*fail) { - *aMange = (grille[snake->teteSnake->ligne][snake->teteSnake->colonne] == DU_MANGER) ? 1 : 0; - grille[snake->teteSnake->ligne][snake->teteSnake->colonne] = TETE_SNAKE; - } -} - -void supprimerQueue(unSnake * snake) { - uneCellule * auxi; - - auxi = snake->queueSnake; - grille[snake->queueSnake->ligne][snake->queueSnake->colonne] = CASE_VIDE; - snake->queueSnake = snake->queueSnake->suiv; - free(auxi); -} - -void initGrille() { - int i , j = 0; - for (i = 0; iligne == 0) { - if (touche == KEY_UP){ - direction->ligne = -1; - direction->colonne = 0; - } - if (touche == KEY_DOWN) { - direction->ligne = 1; - direction->colonne = 0; - } - } - if (direction->colonne == 0) { - if (touche == KEY_LEFT) { - direction->colonne = -1; - direction->ligne = 0; - } - if (touche == KEY_RIGHT) { - direction->colonne = 1; - direction->ligne = 0; - } - } - - ajouterEnTete(snake,snake->teteSnake->ligne + direction->ligne,snake->teteSnake->colonne + direction->colonne, aMange,fail); - if(!*aMange) - supprimerQueue(snake); -} - -void genererDuManger(char ** grille) { - int ligne = 0; - int colonne = 0; - int done = 0; - - srand(time(NULL)); - while (!done){ - ligne = rand() % (nbLignes-1); - colonne = rand() % (nbColonnes-1); - if(grille[ligne][colonne] == CASE_VIDE) { - grille[ligne][colonne] = DU_MANGER; - done = 1; - } - } -} - -void printFail() { - move(nbLignes/2 - 5/2,nbColonnes/2 - 37/2); - printw(" _/_/_/_/ _/_/ _/_/_/ _/ \n"); - move(1 + nbLignes/2 - 5/2,nbColonnes/2 - 37/2); - printw(" _/ _/ _/ _/ _/ \n"); - move(2 + nbLignes/2 - 5/2,nbColonnes/2 - 37/2); - printw(" _/_/_/ _/_/_/_/ _/ _/ \n"); - move(3 + nbLignes/2 - 5/2,nbColonnes/2 - 37/2); - printw(" _/ _/ _/ _/ _/ \n"); - move(4 + nbLignes/2 - 5/2,nbColonnes/2 - 37/2); - printw("_/ _/ _/ _/_/_/ _/_/_/_/ \n"); -} - -int main (int argc, char * argv []) { - - int i = 0; - int touche = 0; - int fail = 0; - unSnake snake = creerSnake(); - uneDirection direction = {0,1}; - int aMange = 1; - int nbCasesMangees = 0; - int delay = 0; - - if (argc > 1) { - modeEvolueDansLequelLeSerpentPeutPasserATraversLesMursEtCeSansAvoirMalDuToutCeQuiEstTresPratiqueCarCaPermetDeJouerPlusLongtemps = 1; - } - initscr(); - keypad(stdscr, TRUE); - noecho(); - cbreak(); - - getmaxyx(stdscr,nbLignes,nbColonnes); - - grille = malloc(nbLignes * sizeof(char *)); - for (i=0;i +#include +#include + + afficher diff --git a/SAE_semestre1/pastilles.c b/SAE_semestre1/pastilles.c deleted file mode 100644 index 5ddb72b..0000000 --- a/SAE_semestre1/pastilles.c +++ /dev/null @@ -1,26 +0,0 @@ -#Avant -5 cases placés aléatoirement dans le quadrillage -1 sepgment = 1 case -si une pastille disparait une autre apparait - -si serpent touche pastille --> pastille disparais --> - nb_pastille -=1 - place aléatoirement une pastille - nb_pastille += 1 - -dimension 1 case - - - -#Après -il faut que la tête du serpent soit le mangeur on vas donc lappeler mangeur -crée 5 pastilles de même taille (une case) -tant que le jeu = True { - place 5 pastilles de façon random sur le quadrillage - si mangeur touche pastille{ - nb_pastille -= 1 (delete) - place aleatoirement une pastille sur une case dans le quadrillage - nb_pastille += 1 - } -Tout cela devient une condition, si cette condition = True alors taille serpent augmente - diff --git a/SAE_semestre1/serpent.c b/SAE_semestre1/serpent.c deleted file mode 100644 index 8cb1bf0..0000000 --- a/SAE_semestre1/serpent.c +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include -#include - -Le serpent = 10 - - Segment en tête = "O" - - Segmennt en queue = "o" -Le serpent avance sans cesse - - Si le le segment en tête est sur la même case que la pastille alors "Segment en queue +2" - - Si le serpent touche une extremité alors "EXIT_FAILLURE" - -Pour déplacer le serpent on utilise les flèches des touches directionnelles. - - "XK_Left" = flèches de gauche - - "XK_Right" = flèches de droite - - "XK_UP" = flèche du haut - - "XK_Down" = flèche du bas - - on aura 4 variables : - int pomme - - int Segment_en_tête - - int Segment_en_queue - - int serpent - -4 tableau : tableau[serpent], tableau[pastille], tableau[Segment_en_tête], tableau[Segment_en_queue] - -Des conditions : if(tableau[Segment_en_tête] == tableau[pastille]){ - Segment_en_queue +2 - pastille-- - } else { - On continu le jeu - } - if(tableau[Segment_en_tête] == limite (0)){ - return EXIT_FAILLURE - } - if(tableau[Segment_en_tête] == tableau[serpent]){ - return EXIT_FAILLURE - } - -Boucles \ No newline at end of file diff --git a/SAE_semestre1/src/controle.c b/SAE_semestre1/src/controle.c new file mode 100644 index 0000000..fff9d12 --- /dev/null +++ b/SAE_semestre1/src/controle.c @@ -0,0 +1,29 @@ +#include +#include +#include + int t ; + int direction; + int go_on =0; +void Controle(){ + while(ToucheEnAttente()){ + t = Touche(); + switch(t){ + case XK_Left : + direction=3; + break; + case XK_Right: + direction=4; + break; + case XK_Up: + direction=1; + break; + case XK_Down: + direction=2; + break; + case XK_Escape: + go_on=0; + break; + break; + } + } +} \ No newline at end of file diff --git a/SAE_semestre1/src/main.c b/SAE_semestre1/src/main.c new file mode 100644 index 0000000..13d5d24 --- /dev/null +++ b/SAE_semestre1/src/main.c @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include +#include "../fichier.h/time.h" +#include "../fichier.h/controle.h" +#define CYCLE 10000L + int go_on=0; +int go_on=1; +/*Fonction Pour créer la première scene du jeu*/ +void DessinerScene(){ + snprintf(timer,6,"%02d:%02d", minute, seconde); + ChoisirCouleurDessin(CouleurParComposante(141,199,63)); + RemplirRectangle(20,20,1160,700); + ChoisirCouleurDessin(CouleurParComposante(255,255,255)); + EcrireTexte(10,760,timer,2); + serpent=ChargerSprite("serpent.png"); + fond = ChargerSprite("fond.png"); + + + for (i = 0; i < segment; i++){ + AfficherSprite(serpent, x-(i*20), y); + pos_x[i]=x-(i*20); + pos_y[i]=y; + old_y[i]=pos_y[i]; + old_x[i]=pos_x[i]; + } + srand(time(NULL)); + pomme=ChargerSprite("pomme.png"); + for (p = 0; p < 5; p++) { + pommex[p] = ((rand() % (58)+1)*20); + pommey[p] = ((rand() % (35)+1)*20); + AfficherSprite(pomme, pommex[p], pommey[p]); + } +} + +int main(){ + + /* paramétrage de la fenêtre + chargement première scène */ + InitialiserGraphique(); + CreerFenetre(350,100,1200,800); + EffacerEcran(CouleurParComposante(0,0,0)); + suivant = Microsecondes()+CYCLE; + old_seconde=(suivant/1000000)%10; + DessinerScene(); + + /*Boucle Principale du Programme*/ + while(go_on){ + Timer(); + Controle(); + Serpent(); + Pomme(); + } + + /* fermeture de la fenêtre si ECHAP pressé*/ + FermerGraphique(); + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/Makefile b/SAE_semestre1/src/menu.c similarity index 100% rename from Makefile rename to SAE_semestre1/src/menu.c diff --git a/SAE_semestre1/src/pastille.c b/SAE_semestre1/src/pastille.c new file mode 100644 index 0000000..e69de29 diff --git a/SAE_semestre1/src/serpent.c b/SAE_semestre1/src/serpent.c new file mode 100644 index 0000000..24531ee --- /dev/null +++ b/SAE_semestre1/src/serpent.c @@ -0,0 +1,27 @@ +#include +#include +#include + +int direction = 4; +int t; + void Controle(void){ + printf("JSHUIHUS"); + while(ToucheEnAttente()){ + t = Touche(); + switch(t){ + case XK_Left: + printf("Gauche\n"); + break; + case XK_Right : + printf("Droite\n"); + break; + case XK_Up: + printf("Haut"); + break; + case XK_Down: + printf("bas"); + break; + } + } + } + diff --git a/SAE_semestre1/terrain.c b/SAE_semestre1/src/terrain.c similarity index 89% rename from SAE_semestre1/terrain.c rename to SAE_semestre1/src/terrain.c index 68f0844..0a23148 100644 --- a/SAE_semestre1/terrain.c +++ b/SAE_semestre1/src/terrain.c @@ -1,18 +1,20 @@ #include #include #include -#include "time.c" +/*#include "time.h"*/ #define HAUTEUR 20 #define LARGEUR 30 #define TAILLE_CASE 20 #define ESPACE_NOIR 100 +int direction = 4; +int t; + void AfficherQuadrillage(){ int j; int i; InitialiserGraphique(); - CreerFenetre(10, 10, 30 * TAILLE_CASE, 20 * TAILLE_CASE + ESPACE_NOIR); for (i = 0; i < LARGEUR; i++) { @@ -34,11 +36,3 @@ void AfficherQuadrillage(){ RemplirRectangle((LARGEUR - 1) * TAILLE_CASE, 0, TAILLE_CASE, HAUTEUR * TAILLE_CASE); } -int main(void){ - AfficherQuadrillage(); - Temps(); - Touche(); - FermerGraphique(); - return EXIT_SUCCESS; -} - diff --git a/SAE_semestre1/src/time.c b/SAE_semestre1/src/time.c new file mode 100644 index 0000000..e60db29 --- /dev/null +++ b/SAE_semestre1/src/time.c @@ -0,0 +1,37 @@ +#include +#include +#include +#define CYCLE 10000L + +int seconde=0; +int minute=0; +int seconde_actuel=0; +int old_seconde=0; +char timer[6]; +unsigned long int suivant; + +void Update_Timer(){ + snprintf(timer,6,"%02d:%02d", minute, seconde); + ChoisirCouleurDessin(CouleurParComposante(0,0,0)); + RemplirRectangle(0,700,1200,800); + ChoisirCouleurDessin(CouleurParComposante(255,255,255)); + EcrireTexte(10,760,timer,2); +} + +void Timer(){ + if(Microsecondes()> suivant){ + suivant = Microsecondes()+CYCLE; + seconde_actuel = (suivant/1000000)%10; + if(seconde_actuel !=old_seconde){ + old_seconde = seconde_actuel; + if(seconde == 59){ + minute=minute+1; + seconde=0; + Update_Timer(); + }else{ + seconde = seconde+1; + Update_Timer(); + } + } + } +} diff --git a/SAE_semestre1/time.c b/SAE_semestre1/time.c deleted file mode 100644 index d1ee291..0000000 --- a/SAE_semestre1/time.c +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include -#include - - void Temps(void) { - int minutes = 0; - int secondes = 0; - int tempsTotal = minutes * 60; - char x[6]; - - while(1) { - snprintf(x,6, "%02d:%02d", tempsTotal / 60, tempsTotal % 60); - ChoisirCouleurDessin(CouleurParComposante(0,0,0)); - RemplirRectangle(10,400, 100,50); - ChoisirCouleurDessin(CouleurParComposante(255, 255, 255)); /* Blanc */ - EcrireTexte(10,450, x , 2); /* Taille 2 pour un texte plus grand */ - sleep(1); - tempsTotal++; - } -} diff --git a/fonctions.h b/fonctions.h deleted file mode 100644 index 724b2cb..0000000 --- a/fonctions.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef fonctions.h -#define fonctions.h - -/*Variables fichier terrain.c*/ - void variables(){ - int j; - int i; - } - #endif \ No newline at end of file