From 51a3bbb3d98b73b8400412183d095b24abfd9153 Mon Sep 17 00:00:00 2001 From: suck5u <suck5u@etu.univ-lorraine.fr> Date: Mon, 28 Dec 2020 18:39:48 +0100 Subject: [PATCH] Apparition des ennemis tous les X temps --- code/display.c | 18 ++++++++++++------ code/display.h | 4 ++-- code/enemy.c | 2 +- code/main.c | 2 +- code/round_management.c | 30 ++++++++++++++++++++++++------ code/round_management.h | 6 ++++-- code/world_data.c | 19 ++++++++++++------- 7 files changed, 56 insertions(+), 25 deletions(-) diff --git a/code/display.c b/code/display.c index a8e2479..457067f 100644 --- a/code/display.c +++ b/code/display.c @@ -192,18 +192,23 @@ void init_enemies_ressources(SDL_Renderer *renderer, resources_t *resources, wor } } -void clear_enemies_ressources() +void clear_enemies_ressources(resources_t *resources) { - + free(resources->enemies); } -void destroy_textures(resources_t *resources) +void destroy_textures(resources_t *resources, world_t *world) { SDL_DestroyTexture(resources->background); SDL_DestroyTexture(resources->soldier_idle_left); SDL_DestroyTexture(resources->soldier_aim_up_left); SDL_DestroyTexture(resources->soldier_crouch_left); + + SDL_DestroyTexture(resources->soldier_idle_right); + SDL_DestroyTexture(resources->soldier_aim_up_right); + SDL_DestroyTexture(resources->soldier_crouch_right); + for(int i = 0; i < 10; i++) { SDL_DestroyTexture(resources->soldier_run_left[i]); @@ -212,9 +217,10 @@ void destroy_textures(resources_t *resources) SDL_DestroyTexture(resources->soldier_jump_right[i]); } - SDL_DestroyTexture(resources->soldier_idle_right); - SDL_DestroyTexture(resources->soldier_aim_up_right); - SDL_DestroyTexture(resources->soldier_crouch_right); + for (int i = 0; i < world->rounds.number_enemies; ++i) + { + SDL_DestroyTexture(resources->enemies[i]); + } SDL_DestroyTexture(resources->bullet); SDL_DestroyTexture(resources->enemy); diff --git a/code/display.h b/code/display.h index a4b5c98..8a23c75 100644 --- a/code/display.h +++ b/code/display.h @@ -46,9 +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(); +void clear_enemies_ressources(resources_t *resources); -void destroy_textures(resources_t *resources); +void destroy_textures(resources_t *resources, world_t *world); //void rotate_right(SDL_Renderer *renderer, world_t *world,resources_t *resources); diff --git a/code/enemy.c b/code/enemy.c index 4851fce..030e773 100644 --- a/code/enemy.c +++ b/code/enemy.c @@ -22,7 +22,7 @@ void init_enemy(enemy_t *enemy) }else{ init_enemyType4(enemy); } - enemy->is_moving = 1; + enemy->is_moving = 0; } void init_enemyType1(enemy_t *enemy) diff --git a/code/main.c b/code/main.c index b0fdccf..fe7a801 100644 --- a/code/main.c +++ b/code/main.c @@ -88,7 +88,7 @@ int main(void) SDL_RenderPresent(renderer); } // Quitter SDL - destroy_textures(&resources); + destroy_textures(&resources,&world); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); diff --git a/code/round_management.c b/code/round_management.c index 03eacdd..745cc90 100644 --- a/code/round_management.c +++ b/code/round_management.c @@ -14,9 +14,16 @@ void save_game() }*/ -int isRoundEnded() +int isRoundEnded(round_t *round) { - return 0; + for (int i = 0; i < round->number_enemies; ++i) + { + if(round->enemies[i].sprite.is_visible == 1) + { + return 0; + } + } + return 1; } @@ -26,16 +33,27 @@ void initFirstRound(round_t *round, int nbEnemies, int incrementation) round->round_number = 0; round->number_enemies = nbEnemies; round->incrementation = incrementation; + round->counter = 0; + round->index_to_spawn = 0; createEnemies(round); } //Actualiser qui se déplace void updateRound(round_t *round) { - + if(round->counter == 0) + { + round->enemies[round->index_to_spawn].is_moving = 1; + round->index_to_spawn++; + } + round->counter++; + if(round->counter == 500) + { + round->counter = 0; + } } -void nextRound(round_t *roun) +void nextRound(round_t *round) { } @@ -50,7 +68,7 @@ void createEnemies(round_t *round) } } -void clearEnemies() +void clearEnemies(round_t *round) { - + free(round->enemies); } \ No newline at end of file diff --git a/code/round_management.h b/code/round_management.h index e2b88c8..f764ef8 100644 --- a/code/round_management.h +++ b/code/round_management.h @@ -9,6 +9,8 @@ struct round_s int incrementation; //Nombre d'ennemis en + à chaque round int number_enemies; //Nombre d'ennemis actuel dans la manche enemy_t *enemies; //Tableau d'ennemis + int counter; //Compteur entre chaque apparition des ennemis + int index_to_spawn; //Index pour savoir quel ennemi doit apparaitre }; /** * \brief Type qui correspond au round @@ -16,7 +18,7 @@ struct round_s typedef struct round_s round_t; -int isRoundEnded(); +int isRoundEnded(round_t *round); void initFirstRound(round_t *round, int nbEnemies, int incrementation); @@ -26,6 +28,6 @@ void nextRound(round_t *round); void createEnemies(round_t *round); -void clearEnemies(); +void clearEnemies(round_t *round); #endif \ No newline at end of file diff --git a/code/world_data.c b/code/world_data.c index a25a0fa..b74126a 100644 --- a/code/world_data.c +++ b/code/world_data.c @@ -91,23 +91,27 @@ void refresh_data(world_t *world) //Si la manche n'est pas finie - if(isRoundEnded() == 0) + if(isRoundEnded(&world->rounds) == 0) { updateRound(&world->rounds); for (int i = 0; i < world->rounds.number_enemies ; i++) { - enemy_walk(&world->rounds.enemies[i],&world->soldier); - world->rounds.enemies[i].DestEnemy.x = world->rounds.enemies[i].sprite.x; - world->rounds.enemies[i].DestEnemy.y = world->rounds.enemies[i].sprite.y; - //Si l'ennemi touche le soldat - //enemy_touch_soldier(&world->rounds.enemies[i],&world->soldier); - enemy_dead(&world->rounds.enemies[i],&world->soldier); + if(world->rounds.enemies[i].is_moving == 1) + { + enemy_walk(&world->rounds.enemies[i],&world->soldier); + world->rounds.enemies[i].DestEnemy.x = world->rounds.enemies[i].sprite.x; + world->rounds.enemies[i].DestEnemy.y = world->rounds.enemies[i].sprite.y; + //Si l'ennemi touche le soldat + //enemy_touch_soldier(&world->rounds.enemies[i],&world->soldier); + enemy_dead(&world->rounds.enemies[i],&world->soldier); + } } } //Sinon si la manche est finie, manche suivante else { nextRound(&world->rounds); + //printf("gg ta gagné"); //Charger le bon nombre de texture } @@ -170,6 +174,7 @@ void handle_events(SDL_Event *event,world_t *world) //On indique la fin du jeu //Libère la mémoire du tableau DestBullet pour l'affichage free(world->soldier.DestBullet); + clearEnemies(&world->rounds); world->gameover = 1; } -- GitLab