From fd4e67514e6154f717168fd02396847eddbb5885 Mon Sep 17 00:00:00 2001 From: Damien Appert Date: Thu, 30 Sep 2010 09:35:58 +0000 Subject: modif pour la mémoire + diag classe + lvlTest01 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///var/svn/2010-netlemmings/trunk@75 077b3477-7977-48bd-8428-443f22f7bfda --- Lemmings.bmp | Bin 0 -> 4806750 bytes .../SDL_tuto/TestParserLemmingsLVL/lvlTest01.ini | 40 +++++ .../SDL_tuto/TestParserLemmingsLVL/parse_ini.yy | 190 ++++++++++++--------- 3 files changed, 147 insertions(+), 83 deletions(-) create mode 100755 Lemmings.bmp create mode 100644 sdl-test/SDL_tuto/TestParserLemmingsLVL/lvlTest01.ini diff --git a/Lemmings.bmp b/Lemmings.bmp new file mode 100755 index 0000000..fbc4f36 Binary files /dev/null and b/Lemmings.bmp differ diff --git a/sdl-test/SDL_tuto/TestParserLemmingsLVL/lvlTest01.ini b/sdl-test/SDL_tuto/TestParserLemmingsLVL/lvlTest01.ini new file mode 100644 index 0000000..e97a799 --- /dev/null +++ b/sdl-test/SDL_tuto/TestParserLemmingsLVL/lvlTest01.ini @@ -0,0 +1,40 @@ +# LVL extracted by Lemmini #LVL1000.LVL +releaseRate = 1 +numLemmings = 80 +numToRescue = 80 +timeLimit = 3 +numClimbers = 0 +numFloaters = 0 +numBombers = 0 +numBlockers = 0 +numBuilders = 12 +numBashers = 0 +numMiners = 0 +numDiggers = 0 +xPos = 500 +style = brick + +# Objects +# id, xpos, ypos, paint mode (), upside down (0,1) +# paint modes: 8=VIS_ON_TERRAIN, 4=NO_OVERWRITE, 0=FULL (only one value possible) +object_2 = 1, 600, 0, 4, 0 + +# Terrain +# id, xpos, ypos, modifier +# modifier: 8=NO_OVERWRITE, 4=UPSIDE_DOWN, 2=REMOVE (combining allowed, 0=FULL) +terrain_0 = 26, 300, 150, 0 +terrain_1 = 26, 364, 151, 0 +terrain_2 = 26, 428, 152, 0 +terrain_3 = 26, 492, 153, 0 +terrain_4 = 26, 556, 154, 0 +terrain_5 = 26, 620, 155, 0 +terrain_6 = 26, 684, 156, 0 +terrain_7 = 26, 748, 157, 0 +terrain_8 = 46, 600, 0, 0 + + +#Steel +# id, xpos, ypos, width, height + +#Name +name = It's all a matter of timing diff --git a/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy b/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy index ce99d5a..9ec3d17 100644 --- a/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy +++ b/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy @@ -113,21 +113,22 @@ // FIN: MAP_STRUCTURE // DEBUT: LEMMINGS_STRUCTURE - // LEMTYPE_COUNT - 2 == lemm_XX.gif - #define LEMTYPE_COUNT 19 + // LEMTYPE - OTHER_LEMTYPE == lemm_XX.gif + #define OTHER_LEMTYPE 3 + #define LEMTYPE 20 enum eLemmingJob { walker , faller , climber , climber_to_faller , floater , splat , stopper , drowning , trap_death , exIt , bomber, builder , builder_end , digger , basher , miner , jumper , - died , enter + died , enter , safe }; - char tabString_eLemmingJob[LEMTYPE_COUNT][20] = { + char tabString_eLemmingJob[LEMTYPE][20] = { "walker" , "faller" , "climber" , "climber_to_faller" , "floater" , "splat" , "stopper" , "drowning" , "trap_death" , "exIt" , "bomber", "builder" , "builder_end , digger" , "basher" , "miner" , "jumper", - "died" , "enter" + "died" , "enter" , "safe" }; struct lemmingMask { @@ -244,8 +245,11 @@ }; struct lemming { - int nbr; // number of lemming on this map; default=0; - struct listeSimplementChainee *ll; // list of lemming; default=NULL; + int nbrInput; // number of lemming will be create; default=0; + int nbr; // number of lemming on this map; default=0; + int nbrDied; // number of lemming Died on this map; default=0; + int nbrSafe; // number of lemming Saved on this map; default=0; + struct listeSimplementChainee *ll; // list of lemming; default=NULL; }; struct gameInit { @@ -298,6 +302,8 @@ void paint_objet (struct gameInit *gInit, int cptFps); + void supprLem (struct gameInit *gInit, int cptFps); + void paint_lemming (struct gameInit *gInit, int cptFps); int lancement(); @@ -441,16 +447,10 @@ decl: STYLE AFF val { // init terrain if(gInit->t.lt==NULL){ gInit->t.nbr=0; - // gInit->t.lt=malloc(sizeof(struct listeSimplementChainee)); - // gInit->t.lt->next=NULL; } else { gInit->t.nbr+=1; } - /* gInit->t.lt->pt=malloc(sizeof(struct paraTerrain)); - gInit->t.lt->po=NULL; - gInit->t.lt->ps=NULL; - gInit->t.lt->pl=NULL;*/ listeItem=&gInit->t.lt; } @@ -459,16 +459,9 @@ decl: STYLE AFF val { // init objet if(gInit->o.lo==NULL){ gInit->o.nbr=0; - // gInit->o.lo=malloc(sizeof(struct listeSimplementChainee)); - // gInit->o.lo->next=NULL; } else { gInit->o.nbr+=1; } - /* gInit->o.lo->pt=NULL; - gInit->o.lo->po=malloc(sizeof(struct paraObjet)); - gInit->o.lo->po->cptState=0; - gInit->o.lo->ps=NULL; - gInit->o.lo->pl=NULL; */ listeItem=&gInit->o.lo; } @@ -477,16 +470,9 @@ decl: STYLE AFF val { // init steel if(gInit->s.ls==NULL){ gInit->s.nbr=0; - // gInit->s.ls=malloc(sizeof(struct listeSimplementChainee)); - // gInit->s.ls->next=NULL; -; } else { gInit->o.nbr+=1; } - /* gInit->s.ls->pt=NULL; - gInit->s.ls->po=NULL; - gInit->s.ls->ps=malloc(sizeof(struct paraSteel)); - gInit->s.ls->pl=NULL;*/ listeItem=&gInit->s.ls; } @@ -534,10 +520,9 @@ decl: STYLE AFF val { // PREMIER CAS if(gInit->mapI.lemmingDATA == NULL){ // 1ER CAS - gInit->mapI.lemmingDATA=malloc((sizeof(struct lemmingJobAndSprite))*(LEMTYPE_COUNT - 2)); + gInit->mapI.lemmingDATA=malloc((sizeof(struct lemmingJobAndSprite))*(LEMTYPE - OTHER_LEMTYPE)); gInit->mapI.cpt = -1; } - //gInit->mapI.lemmingDATA[gInit->mapI.cpt].state=$3->ptr.ints->val; gInit->mapI.cpt +=1; gInit->mapI.lemmingDATA[gInit->mapI.cpt].mask=NULL; gInit->mapI.lemmingDATA[gInit->mapI.cpt].imask=NULL; @@ -632,15 +617,9 @@ decl: STYLE AFF val { if(state>2 && state<6){ k->next=*listeItem; *listeItem=k; - // on supprime *lemmings qui ne sert à rien - // free(l); } - // fichier lemming.ini - - + //free(curr); } else { - // on supprime *lemmings qui ne sert à rien - // free(l); if(state == 0) { printf("BUG: no parse for this token : %s \n",$1); @@ -867,9 +846,9 @@ void stateLemming(struct gameInit *gInit, SDL_Surface *surf ){ } while (unl != NULL){ - if(unl->ID < 17){ + if(unl->ID < (LEMTYPE - OTHER_LEMTYPE)){ - sfT = gInit->mapI.map.tabGif[gInit->mapI.map.tiles + gInit->mapI.map.tilesObjet +gInit->mapI.map.tilesSteel +unl->ID + ADD_OBJ]; + sfT = gInit->mapI.map.tabGif[gInit->mapI.map.tiles + gInit->mapI.map.tilesObjet*2 +gInit->mapI.map.tilesSteel +(unl->ID)*2+(unl->data.pl->dir) + ADD_OBJ]; weightLem=sfT->w; heightLem=sfT->h/(gInit->mapI.lemmingDATA[unl->ID].state); @@ -883,7 +862,7 @@ void stateLemming(struct gameInit *gInit, SDL_Surface *surf ){ k=gInit->o.lo; while(k != NULL){ - sfT=gInit->mapI.map.tabGif[gInit->mapI.map.tiles+k->ID+ADD_OBJ]; + sfT=gInit->mapI.map.tabGif[gInit->mapI.map.tiles+k->ID*2+k->data.po->UD+ADD_OBJ]; x0 = k->x; weightGif = sfT->w; y0 = k->y; @@ -1175,7 +1154,7 @@ void load_fields(char *folder, struct gameInit *gInit ) { exit(86); }*/ - total=(LEMTYPE_COUNT - 2) + gInit->mapI.map.tiles + gInit->mapI.map.tilesSteel + gInit->mapI.map.tilesObjet; + total=((LEMTYPE - OTHER_LEMTYPE)*2) + gInit->mapI.map.tiles + gInit->mapI.map.tilesSteel + ((gInit->mapI.map.tilesObjet)*2); gInit->mapI.map.tabGif=malloc((total + ADD_OBJ) * sizeof(SDL_Surface *)); @@ -1196,25 +1175,26 @@ void load_fields(char *folder, struct gameInit *gInit ) { printf("load_file ok : %i -> '%s'\n", i+cpt, filepath); } } - + free(filepath); //stored objet cpt=ADD_OBJ+gInit->mapI.map.tiles; filepath = malloc(sizeof(char)*(strlen(folder)+lt+strlen("/o_.gif")+(sizeof(int)*10))); - for(i=0; i < gInit->mapI.map.tilesObjet ; ++i) { - sprintf(filepath, "%s/%s%s%d.gif", folder,temp,"o_", i); + for(i=0; i < gInit->mapI.map.tilesObjet*2 ; i+=2) { + sprintf(filepath, "%s/%s%s%d.gif", folder,temp,"o_", i/2); gInit->mapI.map.tabGif[i+cpt] = load_image(filepath); - if(gInit->mapI.map.tabGif[i+cpt] == NULL) { - printf("ERREUR load_file objet: %s\n", filepath); + gInit->mapI.map.tabGif[i+1+cpt] = flipSurfaceUD_LR(load_image(filepath),UD); + if((gInit->mapI.map.tabGif[i+cpt] == NULL)||(gInit->mapI.map.tabGif[i+1+cpt] == NULL)) { + printf("ERREUR load_file Objet: %s\n", filepath); exit(17); } else { - printf("load_file ok : %i -> '%s'\n", i+cpt, filepath); + printf("load_file ok : %i -> '%s' + flip_LR\n", i+cpt, filepath); } } - + free(filepath); //stored steel - cpt=ADD_OBJ+gInit->mapI.map.tiles+gInit->mapI.map.tilesObjet; + cpt=ADD_OBJ+gInit->mapI.map.tiles+(gInit->mapI.map.tilesObjet*2); filepath = malloc(sizeof(char)*(strlen(folder)+lt+strlen("/om_.gif")+(sizeof(int)*10))); @@ -1228,29 +1208,35 @@ void load_fields(char *folder, struct gameInit *gInit ) { printf("load_file ok : %i -> '%s'\n", i+cpt, filepath); } } - + free(filepath); //stored lemmingsDATA - cpt=ADD_OBJ+gInit->mapI.map.tilesObjet+gInit->mapI.map.tiles+gInit->mapI.map.tilesSteel; + cpt=ADD_OBJ+(gInit->mapI.map.tilesObjet*2)+gInit->mapI.map.tiles+gInit->mapI.map.tilesSteel; filepath = malloc(sizeof(char)*(strlen(folderLem)+strlen("lemm")+strlen("/_.gif")+(sizeof(int)*10))); - for(i=0; i < (LEMTYPE_COUNT - 2) ; ++i) { - sprintf(filepath, "%s/%s%d.gif", folderLem,"lemm_",i); - gInit->mapI.map.tabGif[i+cpt] = load_image(filepath); - if(gInit->mapI.map.tabGif[i+cpt] == NULL) { + for(i=0; i < (LEMTYPE - OTHER_LEMTYPE)*2 ; i+=2) { + sprintf(filepath, "%s/%s%d.gif", folderLem,"lemm_",i/2); + gInit->mapI.map.tabGif[i+1+cpt] = load_image(filepath); + gInit->mapI.map.tabGif[i+cpt] = flipSurfaceUD_LR(load_image(filepath),LR); + if((gInit->mapI.map.tabGif[i+cpt] == NULL)||(gInit->mapI.map.tabGif[i+1+cpt] == NULL)) { printf("ERREUR load_file lemmingsDATA: %s\n", filepath); exit(17); } else { - printf("load_file ok : %i -> '%s'\n", i+cpt, filepath); + printf("load_file ok : %i -> '%s' + flip_LR\n", i+cpt, filepath); } } + free(filepath); // bubble_3.gif gInit->mapI.map.tabGif[0]= load_image("../../../styles/bubble/bubble_3.gif"); if ( gInit->mapI.map.tabGif[0] == NULL ) { printf("ERREUR load_file bubble_3.gif: %s\n", "../../../styles/bubble/bubble_3.gif"); exit(17); } - + + free(terrainGif); + free(objetGif); + free(steelGif); + free(folderLem); } @@ -1275,7 +1261,7 @@ void load_files(struct gameInit *gInit) folder = malloc(sizeof(char)*(lt+ltt+1)); spriteINI = malloc(sizeof(char)*(lt+ltt*2+5));// *2:dossier/fichier, +4: .ini, +1: string lemINI = malloc(sizeof(char)*ltlem+1); - + //folder = "/home/jazzblue/Bureau/Projet-Lemmings/trunk/styles/dirt"; //printf("test segFault\n"); @@ -1311,14 +1297,11 @@ void load_files(struct gameInit *gInit) gInit->s.ls=(struct listeSimplementChainee*)rev_listeO(gInit->s.ls); afficher(gInit); - - // printf("\n--> %s\n", folder); - // printf("test segFault DONE\n"); - //printf("TEST load_field am\n"); - //printf("TEST load_field pm\n"); - - - //Si tout s'est bien passé + + //Si tout s'est bien passé + free(folder); + free(spriteINI); + free(lemINI); } @@ -1377,7 +1360,7 @@ void afficher(struct gameInit *gInit){ } printf("LES LEMMINGS:\n"); - for(i=0;i<(LEMTYPE_COUNT - 2);++i){ + for(i=0;i<(LEMTYPE - OTHER_LEMTYPE);++i){ printf("lem_%d:\n\tlemm_%d = %d, %d, %d\n\tpos_%d = %d, %d, %d\n",i,i,gInit->mapI.lemmingDATA[i].state,gInit->mapI.lemmingDATA[i].dir,gInit->mapI.lemmingDATA[i].anim,i,gInit->mapI.lemmingDATA[i].footX,gInit->mapI.lemmingDATA[i].footY,gInit->mapI.lemmingDATA[i].footSize); if (gInit->mapI.lemmingDATA[i].mask != NULL){ @@ -1407,7 +1390,10 @@ void initGame(struct gameInit *gInit){ gInit->t.nbr=0; gInit->o.nbr=0; gInit->s.nbr=0; + gInit->l.nbrInput=0; gInit->l.nbr=0; + gInit->l.nbrDied=0; + gInit->l.nbrSafe=0; gInit->t.lt=NULL; gInit->o.lo=NULL; @@ -1452,7 +1438,7 @@ void creationLemming(struct gameInit *gInit){ //printf("nbLem %d\n",nbLem); // PREMIER CAS - gInit->l.nbr=1; + gInit->l.nbrInput=1; gInit->l.ll = malloc(sizeof(struct listeSimplementChainee)); gInit->l.ll->ID=18; @@ -1495,7 +1481,7 @@ void creationLemming(struct gameInit *gInit){ gInit->l.ll->next=kTemp; - gInit->l.nbr += 1; + gInit->l.nbrInput += 1; gInit->l.ll->ID=18; gInit->l.ll->x=k->x+(sf->w/2)-16; @@ -1504,7 +1490,7 @@ void creationLemming(struct gameInit *gInit){ gInit->l.ll->data.pl=malloc(sizeof(struct paraLemming)); gInit->l.ll->data.pl->dir=1; gInit->l.ll->data.pl->cptState=0; - + } //FIN TEST CREATION UN LEMMING } @@ -1580,6 +1566,9 @@ void paint_terrain (struct gameInit *gInit){ //SDL_FillRect( screen, &screen->clip_rect, SDL_MapRGB( screen->format, 0x0, 0x0, 0x0 ) ); SDL_BlitSurface(background, &camera, screen, NULL); if( SDL_Flip( screen ) == -1 ) { return 1;} //scanf("%d",&pas); } } + + printf("REVERSE l.ll\n"); + gInit->l.ll=(struct listeSimplementChainee*)rev_listeO(gInit->l.ll); } @@ -1594,7 +1583,7 @@ void paint_objet (struct gameInit *gInit, int cptFps){ offset.x = k->x; offset.y = k->y; - sf = gInit->mapI.map.tabGif[gInit->mapI.map.tiles+k->ID+ADD_OBJ]; + sf = gInit->mapI.map.tabGif[gInit->mapI.map.tiles+k->ID*2+k->data.po->UD+ADD_OBJ]; objetAnim.x = 0; objetAnim.h = sf->h/gInit->mapI.map.tabDataSprO[k->ID].state; @@ -1621,29 +1610,29 @@ void paint_lemming (struct gameInit *gInit, int cptFps){ SDL_Rect offset,objetAnim; SDL_Surface *sf; struct listeSimplementChainee *k=NULL; - int res,nbLem=0; + int res; + k=gInit->l.ll; while ( k !=NULL ) { if((k->y >= LEVEL_HEIGHT)||((k->data.pl->cptState == 0 ) && (k->ID == 8))) - { + { k->ID=17; // decret de décès } - - if((cptFps == gInit->mapI.paraMap[0] * nbLem) && (k->ID == 18)){ + + if((cptFps == gInit->mapI.paraMap[0] * (gInit->l.nbr + gInit->l.nbrDied + gInit->l.nbrSafe)) && (k->ID == 18)){ k->ID=1; - nbLem++; + ++(gInit->l.nbr); } // lemmings => spr de sa mort ou vivant - if((k->data.pl->cptState != 0 ) || (k->ID < 17)){ + if((k->data.pl->cptState != 0 ) || (k->ID < (LEMTYPE - OTHER_LEMTYPE))){ offset.x = k->x; offset.y = k->y; - sf = gInit->mapI.map.tabGif[gInit->mapI.map.tiles+gInit->mapI.map.tilesObjet+gInit->mapI.map.tilesSteel+k->ID+ADD_OBJ]; - if (k->data.pl->dir==0) {sf=flipSurfaceUD_LR(sf,LR);} + sf = gInit->mapI.map.tabGif[gInit->mapI.map.tiles+(gInit->mapI.map.tilesObjet*2)+gInit->mapI.map.tilesSteel+(k->ID)*2+k->data.pl->dir+ADD_OBJ]; objetAnim.x = 0; objetAnim.h = sf->h/(gInit->mapI.lemmingDATA[k->ID].state); objetAnim.y = (anim_objet((gInit->mapI.lemmingDATA[k->ID].anim+90),0,cptFps,gInit->mapI.lemmingDATA[k->ID].state,&k->data.pl->cptState))*(objetAnim.h); // +3 : 0 == loop et dans anim_objet c'est 3 pas 0 (fichier de conf) FIXME @@ -1652,12 +1641,45 @@ void paint_lemming (struct gameInit *gInit, int cptFps){ printf("ERREUR [%d] SDL_BlitSurface : ",res); } } - k=k->next; + k=k->next; } ///FIN TEST: LEM stateLemming(gInit,background); } +void supprLem (struct gameInit *gInit, int cptFps){ + struct listeSimplementChainee *k=NULL; + // refresh liste all of 100 tick + if(cptFps % 100 == 0) + { + k=gInit->l.ll; + while(k != NULL){ + if(k->next != NULL){ + switch(k->next->ID){ + // DIED + case 17 : { + k->next=k->next->next; + gInit->l.nbrDied++; + gInit->l.nbr--; + break; + } + // SAFE + case 19 : { + k->next=k->next->next; + gInit->l.nbrSafe++; + gInit->l.nbr--; + break; + } + default: k=k->next; break; + } + } else { + k=k->next; + } + } + printf("nbrInput = %d\nnbrInGame = %d\nnbrDied = %d\nnbrSafe = %d\n",gInit->l.nbrInput,gInit->l.nbr,gInit->l.nbrDied,gInit->l.nbrSafe); + } +} + // Par défaut, c'est l'analyse LEXICALE qui est lancée ! int lancement (){ @@ -1666,7 +1688,6 @@ int lancement (){ int quit = 0; SDL_Rect camera; int mouseX; - int nbLem; //La structure d'evenement SDL_Event event; @@ -1713,9 +1734,8 @@ printf("DEBUG ludo : camera.w==%i, camera.h==%i\n", camera.w, camera.h); SDL_FillRect( background, &background->clip_rect, SDL_MapRGB( background->format, 0, 0, 0 ) ); - nbLem=0; cptFps=0; - + //paint_terrain paint_terrain(&gInit); @@ -1763,6 +1783,9 @@ SDL_FillRect( background, &background->clip_rect, SDL_MapRGB( background->format // SPR paint_objet (&gInit,cptFps); + + // SUPPR LEM + supprLem(&gInit,cptFps); // LEM paint_lemming (&gInit,cptFps); @@ -1786,7 +1809,7 @@ SDL_FillRect( background, &background->clip_rect, SDL_MapRGB( background->format printf("cptFps = %d, time: %d:%d:%d \n",cptFps,cptFps/(3600*(FPS)),(cptFps/(60*FPS))%60,(cptFps/(FPS))%60); cptFps++; //permission = 0; - quit = 1; + // quit = 1; } @@ -1801,6 +1824,7 @@ int main (int argc, char **argv) { int res,i,num,lt; char *temp,*temp0; + if (argc<2 || argc>3) { fprintf(stderr, "Usage %s [Option] \n",argv[0]); fprintf(stderr,"\nOption:\n\t- 1: on se place dans le dossier 1_orig\n"); -- cgit v1.2.3