diff --git a/travail_de_groupe/chef_oeuvre/src/fire.c b/travail_de_groupe/chef_oeuvre/src/fire.c index b3d7e9797ac3f0418cdd5bb1a718b79b13df913b..8d30ea4d79e25ae10781a761ec0a1e30f639d42b 100644 --- a/travail_de_groupe/chef_oeuvre/src/fire.c +++ b/travail_de_groupe/chef_oeuvre/src/fire.c @@ -74,11 +74,11 @@ booleen_t searchFire(listchainfire_t listFire, int x ,int y) while((listFire!=NULL)&&!(result)) { - if(((listFire->fire).x==x)&&((listFire->fire).y==y)) // si on trouve la semaine voulue + if(((listFire->fire).x==x)&&((listFire->fire).y==y)) { - result= true ;// on chercher si on trouve l'action ou non. + result= true ; } - listFire=listFire->next; // on passe au suivant. + listFire=listFire->next; } return result; } @@ -87,9 +87,9 @@ listchainfire_t deleteAheadFire(listchainfire_t listFire){ listchainfire_t listTemporary; - listTemporary = listFire; // recuperation de la semaine en tête de liste - listFire = listFire->next; // on avance la liste sur le maillon suivant - free(listTemporary); // on libere le maillon en tete + listTemporary = listFire; + listFire = listFire->next; + free(listTemporary); return listFire; } @@ -120,7 +120,7 @@ listchainfire_t offFire (listchainfire_t listFire, int x ,int y ){ return(listFire); } if(((listFire->fire).x==x)&&((listFire->fire).y==y)) { - (listFire->fire).state=0; // feu eteint + (listFire->fire).state=(listFire->fire).state-1; } else{ listFire->next=offFire(listFire->next,x,y); @@ -136,4 +136,55 @@ void travelFire(listchainfire_t listFire){ listTemporary=listTemporary->next; } //freeListFire(listTemporary); -} \ No newline at end of file +} + +void readFapFromFile(char * filename){ + FILE * fp; + int i, j; + fp = fopen(filename, "r"); + if(fp == NULL){ + printf("Error opening file\n"); + exit(1); + } + for(i = 0; i < SIZEMARKOV; i++){ + for(j = 0; j < SIZEMARKOV; j++){ + fscanf(fp, "%d", &markov[i][j]); + } + } + fclose(fp); +} + +void nextFire(listchainfire_t listFire){ + int probability; + int state; + int pDead; + int pSparkle; + int pMedium; + int pStrong; + listchainfire_t listTemporary; + + listTemporary= listFire; + srand(time(NULL)); + + while (!emptyListFire(listTemporary)){ + state=(listTemporary->fire).state; + probability= rand()%101; + + pDead=markov[state][DEAD]*100; + pSparkle=(markov[state][SPARKLE]+markov[state][DEAD])*100; + + pMedium=(markov[state][SPARKLE]+markov[state][DEAD]+markov[state][MEDIUM])*100; + + pStrong=(markov[state][SPARKLE]+markov[state][DEAD]+ + markov[state][MEDIUM]+markov[state][STRONG])*100; + + + if ((0<=probability)&&(probability<pDead)){(listTemporary->fire).state=DEAD;} + else if ((pDead<=probability)&&(probability<pSparkle)){(listTemporary->fire).state=SPARKLE;} + else if ((pSparkle<=probability)&&(probability<pMedium)){(listTemporary->fire).state=MEDIUM;} + else if ((pMedium<=probability)&&(probability<pStrong)){(listTemporary->fire).state=STRONG;} + else {(listTemporary->fire).state=SPREAD;} + + listTemporary=listTemporary->next; + } +} \ No newline at end of file diff --git a/travail_de_groupe/chef_oeuvre/src/fire.h b/travail_de_groupe/chef_oeuvre/src/fire.h index 600b839a375340df80a2d9eaed50df00fbf672ce..510c4b291093d5e8b9e79df74c5442dda06fb8ff 100644 --- a/travail_de_groupe/chef_oeuvre/src/fire.h +++ b/travail_de_groupe/chef_oeuvre/src/fire.h @@ -7,12 +7,18 @@ #include <stdio.h> #define SIZEMARKOV 4 +#define DEAD 0 +#define SPARKLE 1 +#define MEDIUM 2 +#define STRONG 3 +#define SPREAD 4 + typedef struct fire{ int x; int y; - int state; // { dead 0 ;sarkle 1 ; medium_fire 2 ; strong_fire 3} + int state; // { dead 0 ;sarkle 1 ; medium_fire 2 ; strong_fire 3; preading 4} }fire_t; @@ -39,5 +45,8 @@ listchainfire_t deleteFire (listchainfire_t, int ,int ); listchainfire_t freeListFire (listchainfire_t ); listchainfire_t offFire (listchainfire_t, int,int ); void travelFire(listchainfire_t listFire); +void readFapFromFile(char * filename); +void nextFire(listchainfire_t ); + #endif \ No newline at end of file