Game* game_init(){ Game* game = (Game*)malloc(sizeof(Game)); game->maps = liste_init(); game->size = 0; game->success = false; game->current_map_i = 1; char* ligne = (char*)malloc(MAX_TILE_W*sizeof(char)); FILE* src = fopen("maps.txt","r"); if(src==NULL){ fprintf(stderr, "Erreur lors du chargement du fichier maps\n"); return NULL; } while(fgets(ligne,MAX_TILE_W,src)!= NULL){ if(ligne[strlen(ligne)-1] == '\n'){ ligne[strlen(ligne)-1] = '\0'; } char* game_map_src = (char*)malloc(sizeof(ligne)); strcpy(game_map_src,ligne); liste_add_last(game->maps,(void*)game_map_src); game->size += 1; } game->jeu = jeu_init((char*)(game->maps->tete->object)); return game; }
int setResult(Generator* gen, int number, char* result){ /*TODO ameliorer le malloc*/ int res=0; Elem* elem = liste_get(gen->runningList,number); if (elem){ if(result[0]!='#'){ printf("Solution pour \033[32m%d : %s\033[0m\n",number, result ); liste_supprime(gen->runningList,elem); char* str = (char*)xmalloc(sizeof(char)*(strlen(result)+100)); sprintf(str,"%d : %s\n",number,result); fputs(str,gen->output); fflush(gen->output); free(str); liste_add_last(gen->results,number,result); }else{ printf("Pas de solution pour %d\n",number ); } res=1; }else{ printf("Pas de calcul en attente sur %d\n", number); } return res; }
/* Fonction permettant d'initialiser la structure meta */ Meta* meta_init(char* path){ /* on alloue meta une quantite d'espace en memoire */ Meta* meta = (Meta*)leash_malloc(sizeof(Meta)); /* on met le chemin approprie */ char* metaPath = (char*)leash_malloc(sizeof(char)*strlen(path)+strlen("/meta")+strlen(".crypt")+1); strcpy(metaPath,path), strcat(metaPath,"/meta"); meta->answer=(char*)NULL; meta->allowed = liste_init(); /* on regarde si le fichier meta a ete crypte ou non */ int crypted=0; FILE* metaFile = fopen(metaPath,"r"); if(metaFile==NULL){ strcat(metaPath,".crypt"); metaFile = fopen(metaPath,"r"); if(metaFile==NULL){ printf("Erreur ouverture fichier meta\n"); exit(EXIT_FAILURE); } crypted=1; } /* on initialise notre ligne et la variable str */ char line[1024]; char* str; while (fgets(line, sizeof(line), metaFile)) { /* on regarde si meta est crypte */ if(crypted){ meta_decryptLine(line); } int i; for(i=0;i<strlen(line);i++){ if(line[i]=='\n'){ line[i]='\0'; break; } } /* on reprends une deuxieme ligne qui sera cette fois un char* afin de la stocker dans les differents champs de meta */ char* line2; if(strlen(line)>0){ switch(line[0]){ /* on switch suivant le debut de la ligne */ case '>': line2=trim(&line[1]); meta->answer=(char*)leash_malloc(sizeof(char)*(strlen(line2)+1)); strcpy(meta->answer,line2); break; case '$': line2=trim(&line[1]); str=(char*)leash_malloc(sizeof(char)*(strlen(line2)+1)); strcpy(str,line2); liste_add_last(meta->allowed,(void*)str); break; case '#': break; default: printf("ERROR : '%s'\n",line); break; } } } /* On ajoute manuellement les commandes de bases que l'utilisateur pourra tout le temps faire, quelque soit le fichier meta */ char* strexit = (char*)leash_malloc(sizeof(char) * 5); strcpy(strexit,"exit"); char* strabout = (char*)leash_malloc(sizeof(char) * 6); strcpy(strabout,"about"); /*char* strpwd = (char*)leash_malloc(sizeof(char) * 4); strcpy(strpwd,"pwd"); char* strcd = (char*)leash_malloc(sizeof(char) * 3); strcpy(strcd,"cd");*/ liste_add_last(meta->allowed,(void*)strexit); liste_add_last(meta->allowed,(void*)strabout); /*liste_add_last(meta->allowed,(void*)strpwd); liste_add_last(meta->allowed,(void*)strcd);*/ /* on close et on supprime meta, pour eviter la fraude et les fuites memoires */ fclose(metaFile); remove(metaPath); free(metaPath); return meta; }
int getNumber(Generator* gen){ /*printf("Actuel : %d\n",gen->number);*/ gen->number++; liste_add_last(gen->runningList,gen->number,NULL); return gen->number; }