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 e2a778c3ad8ab20faf3fb8b424b46bd778db04b6..9b0ef70971a2681005e2b13240798a5845292ff4 100644 --- a/code/enemy.c +++ b/code/enemy.c @@ -58,7 +58,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/soldier.c b/code/soldier.c index a0fa7bfcd084893d69bd1212898e3f315851ee16..a8cc6aea28b1d5c4cb6cf4114273c1e5c155b17a 100644 --- a/code/soldier.c +++ b/code/soldier.c @@ -36,7 +36,14 @@ void init_bullet(soldier_t *soldier) init_sprite(&soldier->charger[i].sprite, -10, -10, BULLET_WIDTH, BULLET_WIDTH, BULLET_SPEED,1); set_invisible(&soldier->charger[i].sprite); soldier->charger[i].shoot = 0; - soldier->charger[i].sens = soldier->charger[29].sens; + //soldier->charger[i].sens = soldier->charger[29].sens; + if(soldier->is_looking_up == 1) + soldier->charger[i].sens = 'h'; + else if(soldier->direction == 1) + soldier->charger[i].sens = 'd'; + else if(soldier->direction == -1) + soldier->charger[i].sens = 'g'; + soldier->DestBullet[i].x = soldier->charger[i].sprite.x; soldier->DestBullet[i].y = soldier->charger[i].sprite.y; soldier->DestBullet[i].w = BULLET_WIDTH; @@ -85,7 +92,8 @@ void shoot(soldier_t *soldier){ { if(soldier->direction == 1) soldier->charger[soldier->present_bullet].sprite.x = soldier->sprite.x+SOLDIER_WIDTH/2-2; - else{ + else + { soldier->charger[soldier->present_bullet].sprite.x = soldier->sprite.x+30; } soldier->charger[soldier->present_bullet].sprite.y = ORDERED_BULLET-SOLDIER_HEIGHT+15; @@ -122,13 +130,18 @@ void shoot(soldier_t *soldier){ void shootAfterE(soldier_t *soldier){ for (int i = 0; i < NB_BULLET; ++i) { - if (soldier->charger[i].shoot == 1 && over_right(&soldier->charger[i].sprite) == 0 && over_left(&soldier->charger[i].sprite) == 0 ){ - if (soldier->charger[i].sens == 'd'){ + if (soldier->charger[i].shoot == 1 && over_right(&soldier->charger[i].sprite) == 0 && over_left(&soldier->charger[i].sprite) == 0 ) + { + if (soldier->charger[i].sens == 'd') + { soldier->charger[i].sprite.x += soldier->charger[i].sprite.v; - }else if (soldier->charger[i].sens == 'g') + } + else if (soldier->charger[i].sens == 'g') { soldier->charger[i].sprite.x -= soldier->charger[i].sprite.v; - }else{ + } + else + { soldier->charger[i].sprite.y -= soldier->charger[i].sprite.v; } //print_sprite(&soldier->charger[i].sprite); diff --git a/code/world_data.c b/code/world_data.c index 4e402e580d49a28397a0776f63a88cb7f4175a46..d6e04bda117aa57e38ae2ebf1217405fac2b6d06 100644 --- a/code/world_data.c +++ b/code/world_data.c @@ -16,7 +16,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; @@ -39,6 +39,7 @@ int* load_save() { dataToAdd[2] = dataSave[2]; } + free(dataSave); return dataToAdd; } @@ -64,6 +65,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); @@ -156,8 +160,6 @@ void refresh_data(world_t *world) apply_effect(&world->supplying.powerUP,&world->soldier,world->supplying.drop); - - //Position de l'affichage if(world->soldier.is_crouching == 1) @@ -198,13 +200,15 @@ 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); + //Libère le tableau d'ennemis clearEnemies(&world->rounds); world->gameover = 1; } diff --git a/data/save.txt b/data/save.txt index 7cac3b77e97ef9abc02663c83648ec7e7660d45d..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 -10 +4 /Nombre d'ennemis en plus à chaque manche -5 +1 /Nombre de balles 30