diff --git a/code/display.c b/code/display.c index 0f4b22b83e349a985253c8aa07fba33ff4308fb9..9a500a1441843b6196de366f2587b5cfe4e461b1 100644 --- a/code/display.c +++ b/code/display.c @@ -20,6 +20,13 @@ void refresh_graphics(SDL_Renderer *renderer, world_t *world,resources_t *resour //Fond SDL_RenderCopy(renderer, resources->background, NULL, NULL); + + //Aloocation des ressources ennemis lors d'une nouvelle manche + if(world->rounds.is_new_round == 1) + { + realloc_enemies_ressources(renderer,resources,world); + world->rounds.is_new_round = 0; + } //Regarder vers le haut if (world->soldier.sprite.is_visible == 1){ @@ -85,13 +92,6 @@ void refresh_graphics(SDL_Renderer *renderer, world_t *world,resources_t *resour { SDL_RenderCopy(renderer, resources->bullet, NULL, &world->soldier.DestBullet[i]); } - - if(world->rounds.is_new_round == 1) - { - clear_enemies_ressources(resources); - init_enemies_ressources(renderer,resources,world); - world->rounds.is_new_round = 0; - } //Les ennemis for (int i = 0; i < world->rounds.number_enemies; i++) @@ -192,16 +192,30 @@ void init_ressources(SDL_Renderer *renderer, resources_t *resources, world_t *wo void init_enemies_ressources(SDL_Renderer *renderer, resources_t *resources, world_t *world) { - resources->enemies = malloc(sizeof(SDL_Texture*)*world->rounds.number_enemies); + resources->enemies = (SDL_Texture**) malloc(sizeof(SDL_Texture*)*world->rounds.number_enemies); for (int i = 0; i < world->rounds.number_enemies; i++) { resources->enemies[i] = charger_image_transparente("../resources/Player/Right/IdleRight.bmp", renderer, 255,0,255); } } -void clear_enemies_ressources(resources_t *resources) +void realloc_enemies_ressources(SDL_Renderer *renderer, resources_t *resources, world_t *world) { + resources->enemies = (SDL_Texture**) realloc(resources->enemies,sizeof(SDL_Texture*)*world->rounds.number_enemies); + for (int i = 0; i < world->rounds.number_enemies; i++) + { + resources->enemies[i] = charger_image_transparente("../resources/Player/Right/IdleRight.bmp", renderer, 255,0,255); + } +} + +void clear_enemies_ressources(resources_t *resources,int nbEnemies) +{ + for (int i = 0; i < nbEnemies; i++) + { + SDL_DestroyTexture(resources->enemies[i]); + } free(resources->enemies); + resources->enemies = NULL; } void destroy_textures(resources_t *resources, world_t *world) @@ -224,11 +238,9 @@ void destroy_textures(resources_t *resources, world_t *world) SDL_DestroyTexture(resources->soldier_jump_right[i]); } - for (int i = 0; i < world->rounds.number_enemies; ++i) - { - SDL_DestroyTexture(resources->enemies[i]); - } - + printf("nbenemis %d\n",world->rounds.number_enemies); + clear_enemies_ressources(resources,world->rounds.number_enemies); + SDL_DestroyTexture(resources->bullet); SDL_DestroyTexture(resources->enemy); SDL_DestroyTexture(resources->plane); diff --git a/code/display.h b/code/display.h index 8a23c758eeedecfc935bf050c16629f1d0618a77..d637dacbf77c83772b038990331cf4cae853f439 100644 --- a/code/display.h +++ b/code/display.h @@ -46,7 +46,9 @@ void init_ressources(SDL_Renderer *renderer, resources_t *resources, world_t *wo void init_enemies_ressources(SDL_Renderer *renderer, resources_t *resources, world_t *world); -void clear_enemies_ressources(resources_t *resources); +void realloc_enemies_ressources(SDL_Renderer *renderer, resources_t *resources, world_t *world); + +void clear_enemies_ressources(resources_t *resources,int nbEnemies); void destroy_textures(resources_t *resources, world_t *world); diff --git a/code/enemy.c b/code/enemy.c index e777187299e066e8dd9a10e340c56a1ab7c5c05a..8961cdc9d835e0895b2880b43c5e28e231a333c9 100644 --- a/code/enemy.c +++ b/code/enemy.c @@ -48,7 +48,7 @@ void init_enemyType2(enemy_t *enemy) { init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_T2_SPEED, 10); }else{ - init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT,ENEMY_T2_SPEED, 10); + init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT,ENEMY_T2_SPEED, 5); } enemy->type = 2; enemy->DestEnemy.x = enemy->sprite.x; diff --git a/code/file_management.c b/code/file_management.c index 18770b7f32edc41a6b793269f336864b56b2e346..fe978e3be936e1ddc1a7c717cca471fc94803e96 100644 --- a/code/file_management.c +++ b/code/file_management.c @@ -15,7 +15,7 @@ int* getDataSave(const char *name) //Deplacement : nombre de caractere du commentaire +2 (Sauf premier +1) int deplacement[4] = {24,28,43,19}; - int *data = malloc(sizeof(int)); + int *data = malloc(sizeof(int)*4); //int data[4]; for(int i = 0; i < nb_lines/2; i++) { diff --git a/code/round_management.c b/code/round_management.c index be2e185e6d27eb4bf424e43402b4b38f19e6cc40..d8eb24a408a4e10be127b87c3cc8fcaf93e00487 100644 --- a/code/round_management.c +++ b/code/round_management.c @@ -4,7 +4,7 @@ int isRoundEnded(round_t *round) { - for (int i = 0; i < round->number_enemies; ++i) + for (int i = 0; i < round->number_enemies; i++) { if(round->enemies[i].sprite.is_visible == 1) { @@ -23,7 +23,13 @@ void initFirstRound(round_t *round, int nbEnemies, int incrementation) round->counter = 0; round->index_to_spawn = 0; round->is_new_round = 0; - createEnemies(round); + + round->enemies = (enemy_t*) malloc(sizeof(enemy_t)*round->number_enemies); + for (int i = 0; i < round->number_enemies; i++) + { + init_enemy(&round->enemies[i]); + } + printf("Ennemis : %d Incrementation : %d\n",round->number_enemies,round->incrementation); } @@ -44,20 +50,29 @@ void updateRound(round_t *round) void nextRound(round_t *round) { - clearEnemies(round); round->round_number++; printf("Manche %d\n",round->round_number); round->number_enemies = round->number_enemies + round->incrementation; round->index_to_spawn = 0; round->counter = 0; round->is_new_round = 1; + printf("nb enemies %d\n",round->number_enemies); + for (int i = 0; i < round->number_enemies; i++) + { + printf("avant %f i : %d\n",round->enemies[i].sprite.x,i); + } + createEnemies(round); + for (int i = 0; i < round->number_enemies; i++) + { + printf("apres %f i : %d\n",round->enemies[i].sprite.x,i); + } } //Créer nbEnemies void createEnemies(round_t *round) { - round->enemies = malloc(sizeof(enemy_t)*round->number_enemies); + round->enemies = (enemy_t*) realloc(round->enemies,sizeof(enemy_t)*round->number_enemies); for (int i = 0; i < round->number_enemies; i++) { init_enemy(&round->enemies[i]); @@ -67,4 +82,5 @@ void createEnemies(round_t *round) void clearEnemies(round_t *round) { free(round->enemies); + round->enemies = NULL; } \ No newline at end of file diff --git a/code/world_data.c b/code/world_data.c index 075b076cf6eab6d39c1e472830a4a60397ba9ea4..c1dbfa44deeb9b69f2f3bc394963db7209c44c6b 100644 --- a/code/world_data.c +++ b/code/world_data.c @@ -25,7 +25,7 @@ int* load_save() int* dataSave; dataSave = getDataSave("../data/save.txt"); - int *dataToAdd = malloc(sizeof(int)); + int *dataToAdd = malloc(sizeof(int)*3); //Initialiser les valeurs par défaut dataToAdd[0] = SOLDIER_HP; dataToAdd[1] = NUMBER_ENEMIES_START; @@ -48,6 +48,7 @@ int* load_save() { dataToAdd[2] = dataSave[2]; } + free(dataSave); return dataToAdd; } @@ -73,6 +74,9 @@ void init_data(world_t *world) //Initialisation du soldat init_soldier(&world->soldier,data[0]); setBulletD(&world->soldier); + + //Libérer data + free(data); init_supplying(&world->supplying,1); @@ -164,8 +168,6 @@ void refresh_data(world_t *world) apply_effect(&world->supplying.powerUP,&world->soldier,&world->supplying.plane); - - //Position de l'affichage if(world->soldier.is_crouching == 1) @@ -206,14 +208,16 @@ void handle_events(SDL_Event *event,world_t *world) //Uint8 *keystates; while(SDL_PollEvent(event)) { - //Si l'utilisateur a cliqué sur le X de la fenêtre - if( event->type == SDL_QUIT || event->key.keysym.sym == SDLK_ESCAPE) + //Si l'utilisateur a cliqué sur le X de la fenêtre ou Echap + if(event->type == SDL_QUIT || event->key.keysym.sym == SDLK_ESCAPE) { //On indique la fin du jeu + //Sauvegarde la partie save_game(world); //Libère la mémoire du tableau DestBullet pour l'affichage free(world->soldier.DestBullet); - //clearEnemies(&world->rounds); + //Libère le tableau d'ennemis + clearEnemies(&world->rounds); world->gameover = 1; } diff --git a/data/save.txt b/data/save.txt index f24eb31e9a2f70ec33aec790dc0846e06c8416c9..6056dd52a552165dc886b2eec085f4c51e9e27b4 100644 --- a/data/save.txt +++ b/data/save.txt @@ -1,8 +1,8 @@ /Vie du joueur au début 10 /Nombre d'ennemis au début -11 +4 /Nombre d'ennemis en plus à chaque manche -3 +1 /Nombre de balles 30