Ajout time.c

This commit is contained in:
Jude Christ AISSI 2023-11-27 17:19:03 +01:00
parent 315c543e94
commit 9b2b17d5be
6 changed files with 307 additions and 15 deletions

0
Makefile Normal file
View File

View File

@ -0,0 +1,9 @@
#ifndef fonctions.h
#define fonctions.h
/*Variables fichier terrain.c*/
void variables(){
int j;
int i;
}
#endif

View File

@ -0,0 +1,237 @@
#include <stdlib.h>
#include <time.h>
#include <ncurses.h>
#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; i<nbLignes;i++) {
for (j=0;j<nbColonnes;j++) {
grille[i][j] = CASE_VIDE;
}
}
}
void afficherGrille(unSnake snake) {
int i , j = 0;
for (i = 0; i<nbLignes;i++) {
for (j=0;j<nbColonnes;j++) {
printw("%c",grille[i][j]);
}
}
}
void gererEvenement(unSnake * snake, int touche, int * fail, uneDirection * direction,int * aMange) {
if(direction->ligne == 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<nbLignes;i++) {
grille[i] = malloc(nbColonnes*sizeof(char));
}
initGrille();
while (!fail) {
if (aMange){
genererDuManger(grille);
nbCasesMangees ++;
delay = 101 - nbCasesMangees;
delay = (delay < 60) ? 60 : delay;
timeout(delay);
}
afficherGrille(snake);
touche = getch();
gererEvenement(&snake,touche,&fail,&direction,&aMange);
erase();
}
timeout(5000);
erase();
printFail();
getch();
endwin();
return 0;
}

View File

@ -1,27 +1,44 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <graph.h> #include <graph.h>
#include "time.c"
#define HAUTEUR 40 #define HAUTEUR 20
#define LARGEUR 60 #define LARGEUR 30
#define TAILLE_CASE 20
#define ESPACE_NOIR 100
int AfficherRectangle(){ void AfficherQuadrillage(){
int j;
int i;
InitialiserGraphique(); 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)); CreerFenetre(10, 10, 30 * TAILLE_CASE, 20 * TAILLE_CASE + ESPACE_NOIR);
RemplirRectangle(1460, 20, 30, 30);
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(); Touche();
FermerGraphique(); FermerGraphique();
return EXIT_SUCCESS;
} }
int main(){
AfficherRectangle();
return EXIT_SUCCESS;
}

20
SAE_semestre1/time.c Normal file
View File

@ -0,0 +1,20 @@
#include <stdio.h>
#include <unistd.h>
#include <graph.h>
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++;
}
}

9
fonctions.h Normal file
View File

@ -0,0 +1,9 @@
#ifndef fonctions.h
#define fonctions.h
/*Variables fichier terrain.c*/
void variables(){
int j;
int i;
}
#endif