Skip to content
Snippets Groups Projects
Commit f295e50d authored by suck5u's avatar suck5u
Browse files

Correction de problème mémoire. Erreur de segmentation toujours présente lors...

Correction de problème mémoire. Erreur de segmentation toujours présente lors de la fermeture et aléatoirement
parent c9a58e52
No related branches found
No related tags found
No related merge requests found
......@@ -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);
......
......@@ -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);
......
......@@ -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;
......
......@@ -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++)
{
......
......@@ -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
......@@ -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;
}
......
/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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment