diff --git a/code/display.c b/code/display.c index 09a8ac589c14244a88e352e863b3ab865ea17d6c..d07e08897428e93a158c469dfd6bd770c79851a0 100644 --- a/code/display.c +++ b/code/display.c @@ -101,21 +101,6 @@ 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 && world->rounds.enemies[i].isLookingLeft == 1 && world->rounds.enemies[i].isLookingRight == 0) - { - rotate_left(renderer, world, resources->enemies[i],i); - - world->rounds.enemies[i].isLookingLeft = 0; - world->rounds.enemies[i].isLookingRight = 1; - } - else if (world->rounds.enemies[i].direction == -1 && world->rounds.enemies[i].isLookingRight == 1 && world->rounds.enemies[i].isLookingLeft == 0) - { - //rotate_right(renderer, world, resources->enemies[i],i); - rotate_left(renderer, world, resources->enemies[i],i); - world->rounds.enemies[i].isLookingLeft = 1; - world->rounds.enemies[i].isLookingRight = 0; - }*/ load_texture_enemies(resources, renderer, world, i); } } diff --git a/code/enemy.c b/code/enemy.c index 8fc7f0ea37bfcf1f5705233fad9e539d94d67a44..9e1e08dfa874da7011e1ec0b126d29d5031ec3a3 100644 --- a/code/enemy.c +++ b/code/enemy.c @@ -32,8 +32,6 @@ void init_enemy(enemy_t *enemy) } enemy->is_moving = 0; enemy->drop = 0; - enemy->isLookingRight = 1; - enemy->isLookingLeft = 0; } @@ -44,15 +42,12 @@ void init_enemyType1(enemy_t *enemy) { init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_T1_HEIGHT*2-20, ENEMY_T1_WIDTH, ENEMY_T1_HEIGHT, ENEMY_SPEED, 1); enemy->direction = -1; - /*enemy->isLookingRight = 1; - enemy->isLookingLeft = 0;*/ }else{ init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_T1_HEIGHT*2-20, ENEMY_T1_WIDTH, ENEMY_T1_HEIGHT, ENEMY_SPEED, 1); enemy->direction = 1; - /*enemy->isLookingRight = 1; - enemy->isLookingLeft = 0;*/ } enemy->type = 1; + enemy->score = 1; enemy->DestEnemy.x = enemy->sprite.x; enemy->DestEnemy.y = enemy->sprite.y; enemy->DestEnemy.w = ENEMY_T1_WIDTH; @@ -66,16 +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; - - /*enemy->isLookingRight = 1; - enemy->isLookingLeft = 0;*/ }else{ init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT,ENEMY_T2_SPEED, 2); enemy->direction = 1; - /*enemy->isLookingRight = 1; - enemy->isLookingLeft = 0;*/ } enemy->type = 2; + enemy->score = 2; enemy->DestEnemy.x = enemy->sprite.x; enemy->DestEnemy.y = enemy->sprite.y; enemy->DestEnemy.w = ENEMY_WIDTH; @@ -89,15 +80,12 @@ void init_enemyType3(enemy_t *enemy) { init_sprite(&enemy->sprite, SCREEN_WIDTH+75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT, ENEMY_T3_SPEED, 1); enemy->direction = -1; - /*enemy->isLookingRight = 1; - enemy->isLookingLeft = 0;*/ }else{ init_sprite(&enemy->sprite, -75, SCREEN_HEIGHT-ENEMY_HEIGHT*2-20, ENEMY_WIDTH, ENEMY_HEIGHT,ENEMY_T3_SPEED, 1); enemy->direction = 1; - /*enemy->isLookingRight = 1; - enemy->isLookingLeft = 0;*/ } enemy->type = 3; + enemy->score = 3; enemy->DestEnemy.x = enemy->sprite.x; enemy->DestEnemy.y = enemy->sprite.y; enemy->DestEnemy.w = ENEMY_WIDTH; @@ -111,15 +99,12 @@ void init_enemyType4(enemy_t *enemy) { 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; - /*enemy->isLookingRight = 1; - enemy->isLookingLeft = 0;*/ }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->isLookingRight = 1; - enemy->isLookingLeft = 0;*/ } enemy->type = 4; + enemy->score = 1; enemy->DestEnemy.x = enemy->sprite.x; enemy->DestEnemy.y = enemy->sprite.y; enemy->DestEnemy.w = ENEMY_T4_WIDTH; @@ -143,11 +128,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); @@ -158,7 +153,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 256c6cdfddcc55f2d20f7dfc70329ddfee14d3d4..d2a34b383a547d8155552eb6f811e4fdb6dab4e2 100644 --- a/code/enemy.h +++ b/code/enemy.h @@ -19,8 +19,7 @@ struct enemy_s{ int drop; powerUP_t powerUP; int direction; - int isLookingRight; - int isLookingLeft; + int score; }; /** * \brief Type qui correspond au paramètre du soldat @@ -32,7 +31,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