diff --git a/code/display.c b/code/display.c index 9a500a1441843b6196de366f2587b5cfe4e461b1..0f57d82b61ebac6ef7dbf21d86cfddcebac5cc5c 100644 --- a/code/display.c +++ b/code/display.c @@ -90,7 +90,10 @@ void refresh_graphics(SDL_Renderer *renderer, world_t *world,resources_t *resour //Balles du joueur for(int i = 0; i < NB_BULLET; i++) { - SDL_RenderCopy(renderer, resources->bullet, NULL, &world->soldier.DestBullet[i]); + if(world->soldier.charger[i].sprite.is_visible == 1) + { + SDL_RenderCopy(renderer, resources->bullet, NULL, &world->soldier.DestBullet[i]); + } } //Les ennemis @@ -98,6 +101,15 @@ void refresh_graphics(SDL_Renderer *renderer, world_t *world,resources_t *resour { if (world->rounds.enemies[i].sprite.is_visible == 1) { + + /*if(world->rounds.enemies[i].direction == 1) + { + rotate_right(renderer, world, resources->enemies[i],i); + } + else + { + rotate_left(renderer, world, resources->enemies[i],i); + }*/ load_texture_enemies(resources, renderer, world, i); } } @@ -109,6 +121,10 @@ void refresh_graphics(SDL_Renderer *renderer, world_t *world,resources_t *resour load_texture_powerUp(resources, renderer, world); } + if(world->gameover == 1) + { + destroy_textures(resources,world); + } } @@ -192,7 +208,7 @@ 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 = (SDL_Texture**) malloc(sizeof(SDL_Texture*)*world->rounds.number_enemies); + resources->enemies = (SDL_Texture**) calloc(world->rounds.number_enemies,sizeof(SDL_Texture*)); 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); @@ -201,7 +217,12 @@ void init_enemies_ressources(SDL_Renderer *renderer, resources_t *resources, wor 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); + SDL_Texture* *tab = (SDL_Texture**) calloc(world->rounds.number_enemies,sizeof(SDL_Texture*)); + free(resources->enemies); + //resources->enemies = NULL; + resources->enemies = tab; + //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); @@ -210,10 +231,6 @@ void realloc_enemies_ressources(SDL_Renderer *renderer, resources_t *resources, 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; } @@ -237,8 +254,10 @@ void destroy_textures(resources_t *resources, world_t *world) SDL_DestroyTexture(resources->soldier_jump_left[i]); SDL_DestroyTexture(resources->soldier_jump_right[i]); } - - printf("nbenemis %d\n",world->rounds.number_enemies); + for (int i = 0; i < world->rounds.number_enemies; i++) + { + SDL_DestroyTexture(resources->enemies[i]); + } clear_enemies_ressources(resources,world->rounds.number_enemies); SDL_DestroyTexture(resources->bullet); @@ -248,21 +267,21 @@ void destroy_textures(resources_t *resources, world_t *world) } -/*void rotate_right(SDL_Renderer *renderer, world_t *world,resources_t *resources) +void rotate_right(SDL_Renderer *renderer, world_t *world,SDL_Texture* texture, int i) { SDL_RendererFlip flip = SDL_FLIP_VERTICAL; - SDL_RenderCopyEx(renderer, resources->soldier_idle, NULL, &world->DestSoldier, 180, NULL, flip); + SDL_RenderCopyEx(renderer, texture, NULL, &world->rounds.enemies[i].DestEnemy, 180, NULL, flip); - SDL_RenderCopyEx(renderer, resources->soldier_run[5], NULL, &world->DestSoldier, 180, NULL, flip); + //SDL_RenderCopyEx(renderer, resources->soldier_run[5], NULL, &world->DestSoldier, 180, NULL, flip); } -void rotate_left(SDL_Renderer *renderer, world_t *world,resources_t *resources) +void rotate_left(SDL_Renderer *renderer, world_t *world,SDL_Texture* texture, int i) { SDL_RendererFlip flip = SDL_FLIP_VERTICAL; - SDL_RenderCopyEx(renderer, resources->soldier_idle, NULL, &world->DestSoldier, -180, NULL, flip); + SDL_RenderCopyEx(renderer, texture, NULL, &world->rounds.enemies[i].DestEnemy, -180, NULL, flip); - SDL_RenderCopyEx(renderer, resources->soldier_run[5], NULL, &world->DestSoldier, -180, NULL, flip); -}*/ + //SDL_RenderCopyEx(renderer, resources->soldier_run[5], NULL, &world->DestSoldier, -180, NULL, flip); +} void load_texture_idle_left(resources_t *resources, SDL_Renderer *renderer, world_t *world) { diff --git a/code/display.h b/code/display.h index d637dacbf77c83772b038990331cf4cae853f439..1e72ee997417a8c9fdf107dc3d48947b38d12577 100644 --- a/code/display.h +++ b/code/display.h @@ -52,9 +52,9 @@ void clear_enemies_ressources(resources_t *resources,int nbEnemies); void destroy_textures(resources_t *resources, world_t *world); -//void rotate_right(SDL_Renderer *renderer, world_t *world,resources_t *resources); +void rotate_right(SDL_Renderer *renderer, world_t *world,SDL_Texture* texture, int i); -//void rotate_left(SDL_Renderer *renderer, world_t *world,resources_t *resources); +void rotate_left(SDL_Renderer *renderer, world_t *world,SDL_Texture* texture, int i); void load_texture_idle_left(resources_t *resources, SDL_Renderer *renderer, world_t *world); diff --git a/code/enemy.c b/code/enemy.c index 9b0ef70971a2681005e2b13240798a5845292ff4..5af5b168e1cbbefd294d01a5a03d1cf07477df77 100644 --- a/code/enemy.c +++ b/code/enemy.c @@ -41,8 +41,10 @@ void init_enemyType1(enemy_t *enemy) if (random == 1) { init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_SPEED, 1); + enemy->direction = -1; }else{ init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_SPEED, 1); + enemy->direction = 1; } enemy->type = 1; enemy->DestEnemy.x = enemy->sprite.x; @@ -56,9 +58,11 @@ void init_enemyType2(enemy_t *enemy) int random = rand()%2+0; if (random == 1) { - init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_T2_SPEED, 10); + init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_T2_SPEED, 2); + enemy->direction = -1; }else{ - init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT,ENEMY_T2_SPEED, 5); + init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT,ENEMY_T2_SPEED, 2); + enemy->direction = 1; } enemy->type = 2; enemy->DestEnemy.x = enemy->sprite.x; @@ -73,8 +77,10 @@ void init_enemyType3(enemy_t *enemy) if (random == 1) { init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_T3_SPEED, 1); + enemy->direction = -1; }else{ init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT,ENEMY_T3_SPEED, 1); + enemy->direction = 1; } enemy->type = 3; enemy->DestEnemy.x = enemy->sprite.x; @@ -89,8 +95,10 @@ void init_enemyType4(enemy_t *enemy) if (random == 1) { init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_T4_HEIGHT*2-40, ENEMY_T4_WIDTH, ENEMY_T4_HEIGHT, 1, 1); + enemy->direction = -1; }else{ init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_T4_HEIGHT*2-40, ENEMY_T4_WIDTH, ENEMY_T4_HEIGHT,1, 1); + enemy->direction = 1; } enemy->type = 4; enemy->DestEnemy.x = enemy->sprite.x; @@ -105,8 +113,10 @@ void enemy_walk(enemy_t *enemy,soldier_t *soldier) { if(soldier->sprite.x > enemy->sprite.x){ enemy->sprite.x += enemy->sprite.v; + enemy->direction = 1; }else{ enemy->sprite.x -= enemy->sprite.v; + enemy->direction = -1; } enemy->powerUP.sprite.x = enemy->sprite.x; enemy->powerUP.DestPowerUP.x = enemy->powerUP.sprite.x; diff --git a/code/enemy.h b/code/enemy.h index 511ebe7fae844002b7235620927e1ce36735c88a..5a584d12a5f03fb696f355f03300832790db7adc 100644 --- a/code/enemy.h +++ b/code/enemy.h @@ -18,6 +18,7 @@ struct enemy_s{ int power; int drop; powerUP_t powerUP; + int direction; }; /** * \brief Type qui correspond au paramètre du soldat diff --git a/code/main.c b/code/main.c index 6e9302114fa45e1eb8133912302120745fde8d3f..f8e55438dc665634d8500c32d990baf158a2c17b 100644 --- a/code/main.c +++ b/code/main.c @@ -67,19 +67,21 @@ int main(void) } t1 = t2; - //Actualise l'image - refresh_graphics(renderer, &world, &resources); + //Evenements clavier handle_events(&event,&world); //Actualise les donnees du monde refresh_data(&world); + + //Actualise l'image + refresh_graphics(renderer, &world, &resources); SDL_RenderPresent(renderer); } // Quitter SDL - destroy_textures(&resources,&world); + //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 d8eb24a408a4e10be127b87c3cc8fcaf93e00487..0a6b204ad03e1c6b669a9668f31d3e333bc8c007 100644 --- a/code/round_management.c +++ b/code/round_management.c @@ -23,13 +23,12 @@ void initFirstRound(round_t *round, int nbEnemies, int incrementation) round->counter = 0; round->index_to_spawn = 0; round->is_new_round = 0; - - round->enemies = (enemy_t*) malloc(sizeof(enemy_t)*round->number_enemies); + //round->gameFinished = 0; + round->enemies = (enemy_t*) calloc(round->number_enemies,sizeof(enemy_t)); 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); } @@ -57,30 +56,38 @@ void nextRound(round_t *round) 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++) + /*for (int i = 0; i < round->number_enemies*4; i++) { printf("avant %f i : %d\n",round->enemies[i].sprite.x,i); - } + }*/ + //free(round->enemies); createEnemies(round); - for (int i = 0; i < round->number_enemies; i++) + /*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 = (enemy_t*) realloc(round->enemies,sizeof(enemy_t)*round->number_enemies); + //round->enemies = (enemy_t*) realloc(round->enemies,sizeof(enemy_t)*round->number_enemies); + + enemy_t *tab = (enemy_t*) calloc(round->number_enemies,sizeof(enemy_t)); + free(round->enemies); + //round->enemies = NULL; + round->enemies = tab; + //free(tab); + for (int i = 0; i < round->number_enemies; i++) { init_enemy(&round->enemies[i]); } } -void clearEnemies(round_t *round) +/*void clearEnemies(round_t *round) { free(round->enemies); round->enemies = NULL; -} \ No newline at end of file +}*/ \ No newline at end of file diff --git a/code/round_management.h b/code/round_management.h index ae748b8e95f5663aea8d25f8c919f453ab9455db..440c1cf5b1c48d91f8f03c26b2222330e405018b 100644 --- a/code/round_management.h +++ b/code/round_management.h @@ -28,6 +28,6 @@ void nextRound(round_t *round); void createEnemies(round_t *round); -void clearEnemies(round_t *round); +//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 d6e04bda117aa57e38ae2ebf1217405fac2b6d06..6705436ec2c70cd4202ee9c102e069f62c3bcef0 100644 --- a/code/world_data.c +++ b/code/world_data.c @@ -29,7 +29,7 @@ int* load_save() } //Nombre d'ennemis - if(dataSave[1] > 0 && dataSave[1] < 21) + if(dataSave[1] > 0 /*&& dataSave[1] < 210*/) { dataToAdd[1] = dataSave[1]; } @@ -86,108 +86,107 @@ void init_data(world_t *world) void refresh_data(world_t *world) { - //Les balles - for(int i = 0; i < NB_BULLET; i++) - { - world->soldier.DestBullet[i].x = world->soldier.charger[i].sprite.x; - world->soldier.DestBullet[i].y = world->soldier.charger[i].sprite.y; - } - - //Déplacements - if(world->soldier.is_walking) - { - if(world->soldier.direction == 1 && over_right(&world->soldier.sprite) == 0) - walk_right(&world->soldier); - else if(world->soldier.direction == -1 && over_left(&world->soldier.sprite) == 0) - walk_left(&world->soldier); - //Si l'animation se termine on la recommence - if(world->soldier.walk_counter >= 70) - world->soldier.walk_counter = 0; - - world->soldier.walk_counter += 1; - } - - //Saut - if(world->soldier.state_jump != 0) + //Si la manche n'est pas finie + if(isRoundEnded(&world->rounds) == 0) + { + updateRound(&world->rounds); + for (int i = 0; i < world->rounds.number_enemies ; i++) { - jump(&world->soldier); - world->soldier.jump_counter += 1; + 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); + } } - plane_fly(&world->supplying); + } + //Sinon si la manche est finie, manche suivante + else + { + //free(world->rounds.enemies); + nextRound(&world->rounds); + //printf("gg ta gagné"); + //Charger le bon nombre de texture + } + //Les balles + for(int i = 0; i < NB_BULLET; i++) + { + world->soldier.DestBullet[i].x = world->soldier.charger[i].sprite.x; + world->soldier.DestBullet[i].y = world->soldier.charger[i].sprite.y; + } + + //Déplacements + if(world->soldier.is_walking) + { + if(world->soldier.direction == 1 && over_right(&world->soldier.sprite) == 0) + walk_right(&world->soldier); + else if(world->soldier.direction == -1 && over_left(&world->soldier.sprite) == 0) + walk_left(&world->soldier); + + //Si l'animation se termine on la recommence + if(world->soldier.walk_counter >= 70) + world->soldier.walk_counter = 0; + + world->soldier.walk_counter += 1; + } + + //Saut + if(world->soldier.state_jump != 0) + { + jump(&world->soldier); + world->soldier.jump_counter += 1; + } + plane_fly(&world->supplying); - /*enemy_walk(&world->enemy,&world->soldier); - world->enemy.DestEnemy.x = world->enemy.sprite.x; - world->enemy.DestEnemy.y = world->enemy.sprite.y; - enemy_dead(&world->enemy,&world->soldier);*/ - - //Si la manche n'est pas finie - if(isRoundEnded(&world->rounds) == 0) - { - updateRound(&world->rounds); - for (int i = 0; i < world->rounds.number_enemies ; i++) - { - 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); - } - soldier_touch_powerUP(&world->rounds.enemies[i].powerUP,&world->soldier); - apply_effect(&world->rounds.enemies[i].powerUP,&world->soldier,world->rounds.enemies[i].drop); - } - } - //Sinon si la manche est finie, manche suivante - else - { - nextRound(&world->rounds); - //printf("gg ta gagné"); - //Charger le bon nombre de texture - } + /*enemy_walk(&world->enemy,&world->soldier); + world->enemy.DestEnemy.x = world->enemy.sprite.x; + world->enemy.DestEnemy.y = world->enemy.sprite.y; + enemy_dead(&world->enemy,&world->soldier);*/ - soldier_touch_powerUP(&world->supplying.powerUP,&world->soldier); + shootAfterE(&world->soldier); - shootAfterE(&world->soldier); + world->soldier.time_bullet++; - world->soldier.time_bullet++; + plane_dead(&world->supplying,&world->soldier); - plane_dead(&world->supplying,&world->soldier); + soldier_touch_powerUP(&world->supplying.powerUP,&world->soldier); - apply_effect(&world->supplying.powerUP,&world->soldier,world->supplying.drop); - - - //Position de l'affichage - if(world->soldier.is_crouching == 1) - { - if(world->soldier.direction == 1) - world->soldier.DestSoldier.x = world->soldier.sprite.x+36; - - world->soldier.DestSoldier.y = world->soldier.sprite.y+24; - } - else if(world->soldier.is_looking_up == 1) - { - world->soldier.DestSoldier.y = world->soldier.sprite.y-20; - world->soldier.DestSoldier.x = world->soldier.sprite.x; - } - else if(world->soldier.state_jump != 0) - { - if(world->soldier.direction == 1) - world->soldier.DestSoldier.x = world->soldier.sprite.x; - else - world->soldier.DestSoldier.x = world->soldier.sprite.x+8; - - world->soldier.DestSoldier.y = world->soldier.sprite.y; - } - else - { - world->soldier.DestSoldier.x = world->soldier.sprite.x; - world->soldier.DestSoldier.y = world->soldier.sprite.y; - } + apply_effect(&world->supplying.powerUP,&world->soldier,world->supplying.drop); + + + //Position de l'affichage + if(world->soldier.is_crouching == 1) + { + if(world->soldier.direction == 1) + world->soldier.DestSoldier.x = world->soldier.sprite.x+36; + + world->soldier.DestSoldier.y = world->soldier.sprite.y+24; + } + else if(world->soldier.is_looking_up == 1) + { + world->soldier.DestSoldier.y = world->soldier.sprite.y-20; + world->soldier.DestSoldier.x = world->soldier.sprite.x; + } + else if(world->soldier.state_jump != 0) + { + if(world->soldier.direction == 1) + world->soldier.DestSoldier.x = world->soldier.sprite.x; + else + world->soldier.DestSoldier.x = world->soldier.sprite.x+8; + + world->soldier.DestSoldier.y = world->soldier.sprite.y; + } + else + { + world->soldier.DestSoldier.x = world->soldier.sprite.x; + world->soldier.DestSoldier.y = world->soldier.sprite.y; + } } int is_game_over(world_t *world) @@ -209,7 +208,9 @@ void handle_events(SDL_Event *event,world_t *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); + //clearEnemies(&world->rounds); + free(world->rounds.enemies); + //world->rounds.enemies = NULL; world->gameover = 1; } diff --git a/code/world_data.h b/code/world_data.h index 71d503e82eac8df63fc64d932194762776a592d4..5ce7b9d530f2b9c2d78d69571f0ec8f1b9231a03 100644 --- a/code/world_data.h +++ b/code/world_data.h @@ -19,6 +19,7 @@ struct world_s{ round_t rounds; int gameover; /*!< Entier pour la fin du jeu */ int score; /*!< Score du joueur */ + //int gameFinished; }; /** diff --git a/data/save.txt b/data/save.txt index 8b1a5c983969ab9647d54e262d8b3b0161aa77c5..95d14834aaa2dbdfc810d9bbfa929634df4f29ae 100644 --- a/data/save.txt +++ b/data/save.txt @@ -3,6 +3,6 @@ /Nombre d'ennemis au début 6 /Nombre d'ennemis en plus à chaque manche -1 +3 /Nombre de balles 30