diff --git a/code/display.c b/code/display.c index 41a2f9e5710410d23d790197273ff4dffe0e57fa..047fc52fd662070024f4423097f232eb61c6e609 100644 --- a/code/display.c +++ b/code/display.c @@ -94,6 +94,7 @@ void refresh_graphics(SDL_Renderer *renderer, world_t *world,resources_t *resour { if (world->rounds.enemies[i].sprite.is_visible == 1) { + load_texture_enemies(resources, renderer, world, i); if (world->rounds.enemies[i].direction == 1) { load_texture_run_right_enemy(resources, renderer, &world->rounds.enemies[i]); diff --git a/code/enemy.c b/code/enemy.c index 7f657d3a755236c0d4b423edf9368bf2b335a57d..002d3d951b45db0d93a9447c72734173d00dfa62 100644 --- a/code/enemy.c +++ b/code/enemy.c @@ -32,8 +32,7 @@ void init_enemy(enemy_t *enemy) } enemy->is_moving = 0; enemy->drop = 0; - enemy->state = 0; - + enemy->state = 0; } void init_enemyType1(enemy_t *enemy) @@ -48,6 +47,7 @@ void init_enemyType1(enemy_t *enemy) enemy->direction = 1; } enemy->type = 1; + enemy->score = 1; enemy->DestEnemy.x = enemy->sprite.x; enemy->DestEnemy.y = enemy->sprite.y; enemy->DestEnemy.w = ENEMY_T1_WIDTH; @@ -61,12 +61,12 @@ 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, 2); enemy->direction = -1; - }else{ 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->score = 2; enemy->DestEnemy.x = enemy->sprite.x; enemy->DestEnemy.y = enemy->sprite.y; enemy->DestEnemy.w = ENEMY_WIDTH; @@ -85,6 +85,7 @@ void init_enemyType3(enemy_t *enemy) enemy->direction = 1; } enemy->type = 3; + enemy->score = 3; enemy->DestEnemy.x = enemy->sprite.x; enemy->DestEnemy.y = enemy->sprite.y; enemy->DestEnemy.w = ENEMY_WIDTH; @@ -103,6 +104,7 @@ void init_enemyType4(enemy_t *enemy) enemy->direction = 1; } enemy->type = 4; + enemy->score = 1; enemy->DestEnemy.x = enemy->sprite.x; enemy->DestEnemy.y = enemy->sprite.y; enemy->DestEnemy.w = ENEMY_T4_WIDTH; @@ -150,11 +152,21 @@ void enemy_walk(enemy_t *enemy,soldier_t *soldier) } -void enemy_dead(enemy_t *enemy,soldier_t *soldier) +void enemy_dead(enemy_t *enemy,soldier_t *soldier, int *score) { - for(int i = 0; i < NB_BULLET; i++){ - handle_sprites_collision(&enemy->sprite,&soldier->charger[i].sprite); + if(enemy->sprite.is_visible == 1) + { + for(int i = 0; i < NB_BULLET; i++) + { + handle_sprites_collision(&enemy->sprite,&soldier->charger[i].sprite); + } + + if(enemy->sprite.is_visible == 0) + { + *score += enemy->score; + } } + if (enemy->sprite.is_visible == 0 && enemy->drop == 0 && enemy->power == 1) { set_visible(&enemy->powerUP.sprite); @@ -165,7 +177,12 @@ void enemy_dead(enemy_t *enemy,soldier_t *soldier) void enemy_touch_soldier(enemy_t *enemy,soldier_t *soldier) { - handle_sprites_collision_damage_1sprite(&enemy->sprite,&soldier->sprite); + //handle_sprites_collision_damage_1sprite(&enemy->sprite,&soldier->sprite); + if(enemy->sprite.is_visible == 1) + { + handle_sprites_collision(&enemy->sprite, &soldier->sprite); + } + } diff --git a/code/enemy.h b/code/enemy.h index 1a50da8c56749eb796cd518c8b97405293bd2f6d..2d6bc62a1ec87674fdb5391389e51c901a134f7b 100644 --- a/code/enemy.h +++ b/code/enemy.h @@ -19,6 +19,7 @@ struct enemy_s{ int drop; powerUP_t powerUP; int direction; + int score; int state; }; /** @@ -31,7 +32,7 @@ void init_enemy(enemy_t *enemy); void enemy_walk(enemy_t *enemy,soldier_t *soldier); -void enemy_dead(enemy_t *enemy,soldier_t *soldier); +void enemy_dead(enemy_t *enemy,soldier_t *soldier, int *score); void enemy_touch_soldier(enemy_t *enemy,soldier_t *soldier); diff --git a/code/file_management.c b/code/file_management.c index fe978e3be936e1ddc1a7c717cca471fc94803e96..995cdfb4ba568a663a5422f690b1336423ad381b 100644 --- a/code/file_management.c +++ b/code/file_management.c @@ -5,7 +5,7 @@ int* getDataSave(const char *name) { int value = 0; - int nb_lines = 8; + int nb_lines = 10; FILE *file = fopen(name,"r"); if(file == NULL) @@ -14,8 +14,8 @@ 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)*4); + int deplacement[5] = {24,28,43,22,17}; + int *data = malloc(sizeof(int)*5); //int data[4]; for(int i = 0; i < nb_lines/2; i++) { @@ -33,14 +33,14 @@ int* getDataSave(const char *name) void setDataSave(const char *name, int* data) { FILE *file = fopen(name,"w+"); - int nb_lines = 8; + int nb_lines = 10; if(file == NULL) { perror("Impossible d'ouvrir le fichier"); } - char sentences[4][50] = {"/Vie du joueur au début\n","/Nombre d'ennemis au début\n","/Nombre d'ennemis en plus à chaque manche\n","/Nombre de balles\n"}; + char sentences[5][50] = {"/Vie du joueur au début\n","/Nombre d'ennemis au début\n","/Nombre d'ennemis en plus à chaque manche\n","/Numéro de la manche\n","/Meilleur score\n"}; for(int i = 0; i < nb_lines/2; i++) { fprintf(file,"%s", sentences[i]); diff --git a/code/round_management.c b/code/round_management.c index 640a813c4e780abe1a353a1cffa73c664c31bac6..cc38f8eb12e1fc3636a7b153eda7c44907a3e733 100644 --- a/code/round_management.c +++ b/code/round_management.c @@ -15,9 +15,9 @@ int isRoundEnded(round_t *round) } -void initFirstRound(round_t *round, int nbEnemies, int incrementation) +void initFirstRound(round_t *round, int nbEnemies, int incrementation, int roundNumber) { - round->round_number = 1; + round->round_number = roundNumber; round->number_enemies = nbEnemies; round->incrementation = incrementation; round->counter = 0; @@ -29,7 +29,7 @@ void initFirstRound(round_t *round, int nbEnemies, int incrementation) { init_enemy(&round->enemies[i]); } - printf("Ennemis : %d Incrementation : %d\n",round->number_enemies,round->incrementation); + printf("Manche : %d Ennemis : %d Incrementation : %d\n",round->round_number, round->number_enemies,round->incrementation); } //Actualiser qui se déplace diff --git a/code/round_management.h b/code/round_management.h index 440c1cf5b1c48d91f8f03c26b2222330e405018b..9a61f40c4989290773917ebe4ad03f4626e46ff2 100644 --- a/code/round_management.h +++ b/code/round_management.h @@ -20,7 +20,7 @@ typedef struct round_s round_t; int isRoundEnded(round_t *round); -void initFirstRound(round_t *round, int nbEnemies, int incrementation); +void initFirstRound(round_t *round, int nbEnemies, int incrementation, int roundNumber); void updateRound(round_t *round); diff --git a/code/world_data.c b/code/world_data.c index d19032a00bb3c42698268598c4ef423cafe7f204..2fd8667d70a58def08b66aac26e4bc8155835124 100644 --- a/code/world_data.c +++ b/code/world_data.c @@ -16,11 +16,13 @@ int* load_save() int* dataSave; dataSave = getDataSave("../data/save.txt"); - int *dataToAdd = malloc(sizeof(int)*3); + int *dataToAdd = malloc(sizeof(int)*5); //Initialiser les valeurs par défaut dataToAdd[0] = SOLDIER_HP; dataToAdd[1] = NUMBER_ENEMIES_START; dataToAdd[2] = INCREMENTATION_ENEMIES; + dataToAdd[3] = 1; + dataToAdd[4] = dataSave[4]; //PV du joueur if(dataSave[0] > 0 && dataSave[0] < 31) @@ -29,7 +31,7 @@ int* load_save() } //Nombre d'ennemis - if(dataSave[1] > 0 /*&& dataSave[1] < 210*/) + if(dataSave[1] > 0) { dataToAdd[1] = dataSave[1]; } @@ -39,17 +41,27 @@ int* load_save() { dataToAdd[2] = dataSave[2]; } + + //Numéro de la manche + if(dataSave[3] > 0) + { + dataToAdd[3] = dataSave[3]; + } free(dataSave); return dataToAdd; } void save_game(world_t *world) { - int dataSave[4]; + int dataSave[5]; dataSave[0] = world->soldier.sprite.hp; dataSave[1] = world->rounds.number_enemies; dataSave[2] = world->rounds.incrementation; - dataSave[3] = 30; + dataSave[3] = world->rounds.round_number; + if(world->score > world->highScore) + dataSave[4] = world->score; + else + dataSave[4] = world->highScore; setDataSave("../data/save.txt",dataSave); } @@ -59,8 +71,9 @@ void init_data(world_t *world) //Chargement de la sauvegarde int* data = load_save(); + world->highScore = data[4]; //Chargement de la première manche - initFirstRound(&world->rounds,data[1],data[2]); + initFirstRound(&world->rounds,data[1],data[2],data[3]); //Initialisation du soldat init_soldier(&world->soldier,data[0]); @@ -78,6 +91,7 @@ void init_data(world_t *world) //init_bullet(world); //On n'est pas à la fin du jeu + world->score = 0; world->gameover = 0; //Score à 0 //world->score = 0; @@ -104,8 +118,9 @@ void refresh_data(world_t *world) 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); + //enemy_touch_soldier(&world->rounds.enemies[i],&world->soldier,&world->score); + enemy_touch_soldier(&world->rounds.enemies[i],&world->soldier); + enemy_dead(&world->rounds.enemies[i],&world->soldier,&world->score); } } } diff --git a/code/world_data.h b/code/world_data.h index 5ce7b9d530f2b9c2d78d69571f0ec8f1b9231a03..1369c46309658a61443ad04e986a33de62cd57c8 100644 --- a/code/world_data.h +++ b/code/world_data.h @@ -19,7 +19,7 @@ struct world_s{ round_t rounds; int gameover; /*!< Entier pour la fin du jeu */ int score; /*!< Score du joueur */ - //int gameFinished; + int highScore; }; /** diff --git a/data/save.txt b/data/save.txt index 3963c9b20af603e810238702381b66e0117a7959..d86b63166f37b9c9f2a302d763f99fe144559f76 100644 --- a/data/save.txt +++ b/data/save.txt @@ -1,8 +1,10 @@ /Vie du joueur au début -10 +1 /Nombre d'ennemis au début -8 +18 /Nombre d'ennemis en plus à chaque manche 1 -/Nombre de balles +/Numéro de la manche 30 +/Meilleur score +78