diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e69de29 diff --git a/SAE_semestre1/fonctions.h b/SAE_semestre1/fonctions.h new file mode 100644 index 0000000..724b2cb --- /dev/null +++ b/SAE_semestre1/fonctions.h @@ -0,0 +1,9 @@ +#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/main.c b/SAE_semestre1/main.c index e69de29..1f632f6 100644 --- a/SAE_semestre1/main.c +++ b/SAE_semestre1/main.c @@ -0,0 +1,237 @@ +#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 +#include "time.c" -#define HAUTEUR 40 -#define LARGEUR 60 +#define HAUTEUR 20 +#define LARGEUR 30 +#define TAILLE_CASE 20 +#define ESPACE_NOIR 100 -int AfficherRectangle(){ +void AfficherQuadrillage(){ + int j; + int i; InitialiserGraphique(); - CreerFenetre(10,10,1500,1000); - ChoisirCouleurDessin(CouleurParComposante(0,0,0)); - RemplirRectangle(0,0,1500,1000); - ChoisirCouleurDessin(CouleurParComposante(73,162,37)); - RemplirRectangle(20,20,1450, 800); - ChoisirCouleurDessin(CouleurParComposante(255, 0, 0)); - RemplirRectangle(1460, 20, 30, 30); + CreerFenetre(10, 10, 30 * TAILLE_CASE, 20 * TAILLE_CASE + ESPACE_NOIR); + + for (i = 0; i < LARGEUR; i++) { + for (j = 0; j < HAUTEUR; j++) { + if ((i + j) % 2 == 0) { + ChoisirCouleurDessin(CouleurParComposante(144, 238, 144)); + } else { + ChoisirCouleurDessin(CouleurParComposante(0, 128, 0)); + } + RemplirRectangle(i * TAILLE_CASE, j * TAILLE_CASE, TAILLE_CASE, TAILLE_CASE); + } + } + ChoisirCouleurDessin(CouleurParComposante(0, 0, 0)); + RemplirRectangle(0, HAUTEUR * TAILLE_CASE, LARGEUR * TAILLE_CASE, ESPACE_NOIR); + ChoisirCouleurDessin(CouleurParComposante(0, 0, 0)); + RemplirRectangle(0, 0, LARGEUR * TAILLE_CASE, TAILLE_CASE); + RemplirRectangle(0, 0, TAILLE_CASE, HAUTEUR * TAILLE_CASE); + RemplirRectangle(0, (HAUTEUR - 1) * TAILLE_CASE, LARGEUR * TAILLE_CASE, TAILLE_CASE); + RemplirRectangle((LARGEUR - 1) * TAILLE_CASE, 0, TAILLE_CASE, HAUTEUR * TAILLE_CASE); +} +int main(void){ + AfficherQuadrillage(); + Temps(); Touche(); FermerGraphique(); + return EXIT_SUCCESS; } -int main(){ - AfficherRectangle(); - - return EXIT_SUCCESS; -} diff --git a/SAE_semestre1/time.c b/SAE_semestre1/time.c new file mode 100644 index 0000000..d1ee291 --- /dev/null +++ b/SAE_semestre1/time.c @@ -0,0 +1,20 @@ +#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 new file mode 100644 index 0000000..724b2cb --- /dev/null +++ b/fonctions.h @@ -0,0 +1,9 @@ +#ifndef fonctions.h +#define fonctions.h + +/*Variables fichier terrain.c*/ + void variables(){ + int j; + int i; + } + #endif \ No newline at end of file