diff --git a/travail_de_groupe/chef_oeuvre/src/fire.c b/travail_de_groupe/chef_oeuvre/src/fire.c index 1ad72f870db3bd0d3c4d43ebbea64531f5a61115..fb0c37d24f942dce9c0614e94e17683e78c4c739 100644 --- a/travail_de_groupe/chef_oeuvre/src/fire.c +++ b/travail_de_groupe/chef_oeuvre/src/fire.c @@ -31,11 +31,11 @@ listchainfire_t insertAheadFire(fire_t fire,listchainfire_t listFire) printf("problème d'allocation \n"); exit(1); } - if (!searchFire(listFire,fire.x,fire.y)){ - m->fire=fire; - m->next= listFire; - listFire=m;} - + if ((!searchFire(listFire,fire.x,fire.y))&&(map[fire.x][fire.y]!=2)){ + m->fire=fire; + m->next= listFire; + listFire=m; + } return listFire; } @@ -55,7 +55,6 @@ listchainfire_t startFire(listchainfire_t listFire,int numberFire, int mapSize){ xFire= rand()%mapSize; yFire= rand()%mapSize; - //printf("xf:%d,yf:%d\n",xFire,yFire); fire.x= xFire; fire.y= yFire; fire.state=1; @@ -135,7 +134,6 @@ void travelFire(listchainfire_t listFire){ //printf("x:%d,y:%d\n",(listTemporary->fire).x,(listTemporary->fire).y); listTemporary=listTemporary->next; } - //freeListFire(listTemporary); } void readFapFromFile(char * filename){ @@ -185,9 +183,61 @@ void nextFire(listchainfire_t listFire){ else if ((pMedium<=probability)&&(probability<pStrong)){(listTemporary->fire).state=STRONG;} else {(listTemporary->fire).state=SPREAD;} - //printf("%d %d\n", probability, state); - //printf("%d %d %d %d\n", pDead, pSparkle, pMedium, pStrong); - listTemporary=listTemporary->next; } -} \ No newline at end of file +} + +listchainfire_t probabilitySpreadFire( listchainfire_t listFire, listchainfire_t listTemporary){ + int probability; + fire_t fire; + + probability= rand()%4; + + if((probability==0)&&((listTemporary->fire).x+1<MAPSIZE)){fire.state=1; + fire.x=(listTemporary->fire).x+1; + fire.y=(listTemporary->fire).y; + listFire=insertAheadFire(fire,listFire); + } + if ((probability==1)&&((listTemporary->fire).y+1<MAPSIZE)){fire.state=1; + fire.x=(listTemporary->fire).x; + fire.y=(listTemporary->fire).y+1; + listFire=insertAheadFire(fire,listFire); + } + if ((probability==2)&&((listTemporary->fire).y-1>=0)){fire.state=1; + fire.x=(listTemporary->fire).x; + fire.y=(listTemporary->fire).y-1; + listFire=insertAheadFire(fire,listFire); + } + if ((probability==3)&&((listTemporary->fire).x-1>=0)){fire.state=1; + fire.x=(listTemporary->fire).x-1; + fire.y=(listTemporary->fire).y; + listFire=insertAheadFire(fire,listFire); + } + return listFire; +} + +listchainfire_t spreadFire (listchainfire_t listFire){ + listchainfire_t listTemporary=fireList; + srand(time(NULL)); + while (!emptyListFire(listTemporary)){ + if ((listTemporary->fire).state==4){ + + listFire=probabilitySpreadFire(listFire, listTemporary); + } + listTemporary=listTemporary->next; + } + return listFire; +} + +booleen_t winGame(listchainfire_t listFire){ + booleen_t win = true; + listchainfire_t listTemporary= listFire; + + while (!emptyListFire( listTemporary)){ + if ((listTemporary->fire).state!=0){ + win= false; + break; + } + } + return win; +} \ 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 84686a86881bd2a07895aea29ca00e907e8b387a..5a41da698c245064c7e0a314b671e9aec4527274 100644 --- a/travail_de_groupe/chef_oeuvre/src/fire.h +++ b/travail_de_groupe/chef_oeuvre/src/fire.h @@ -13,7 +13,7 @@ #define STRONG 3 #define SPREAD 4 -#define UPDATETIME 5 +#define UPDATETIME 10 typedef struct fire{ @@ -45,9 +45,12 @@ listchainfire_t deleteAheadFire(listchainfire_t); 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 travelFire(listchainfire_t ); void readFapFromFile(char * filename); void nextFire(listchainfire_t ); +listchainfire_t probabilitySpreadFire( listchainfire_t, listchainfire_t); +listchainfire_t spreadFire (listchainfire_t ); +booleen_t winGame(listchainfire_t ); diff --git a/travail_de_groupe/chef_oeuvre/src/main.c b/travail_de_groupe/chef_oeuvre/src/main.c index 2ce91a51061e2f16521276e0e43cc90a0bfd3a93..71aadadc0fd3ee755877e42fad0e225eb8c4ade0 100644 --- a/travail_de_groupe/chef_oeuvre/src/main.c +++ b/travail_de_groupe/chef_oeuvre/src/main.c @@ -10,9 +10,8 @@ int main(){ readMapFromFile("map.txt"); readFapFromFile("markov.txt"); fireList = startFire(fireList,10,MAPSIZE); - travelFire(fireList); - nextFire(fireList); nextFire(fireList); nextFire(fireList); + mainLoop(); } \ No newline at end of file diff --git a/travail_de_groupe/chef_oeuvre/src/render.c b/travail_de_groupe/chef_oeuvre/src/render.c index bcc85ad59639921ad3dc30517a143c10781e8da1..b633e43b7b8aa4b64aa6db6fcc7ce424accbeae7 100644 --- a/travail_de_groupe/chef_oeuvre/src/render.c +++ b/travail_de_groupe/chef_oeuvre/src/render.c @@ -285,7 +285,8 @@ void drawTime(){ SDL_RenderCopy(renderer, scoreTexture, NULL, &rect); rect.y += rect.h; char str[10]; - sprintf(str, "%d", UPDATETIME - (int)timer/1000 % UPDATETIME); + printf("%d\n", (UPDATETIME * 1000 - (int)timer % (UPDATETIME * 1000))/1000); + sprintf(str, "%d", (UPDATETIME * 1000 - (int)timer % (UPDATETIME * 1000))/1000); SDL_Color textColor = {237,222,17}; SDL_Surface * surface = TTF_RenderText_Solid(robotoFont, str, textColor); SDL_Texture * texture = SDL_CreateTextureFromSurface(renderer, surface); @@ -385,16 +386,16 @@ void mainLoop(){ delta = (a - b); if (delta > 1000/FPS_TO_GET){ timer += delta; - //printf("timer : %f\n", timer/1000); + printf("%d\n", (int)timer % 1000); b = a; - //printf("fps : %f", 1000/delta); switch (gameState){ case MENU: drawMenu(); break; case GAME: - if ((int)timer/1000 % UPDATETIME == 0){ + if ((int)timer % (UPDATETIME * 1000) < 10){ nextFire(fireList); + fireList=spreadFire(fireList); } drawGame(); break;