diff --git a/code/constant.h b/code/constant.h index d539ef6e1eeaa9e456b8ba69270eac5fc18e6f5e..4d29b9119211df899dc3c5d17d09ee3af2f3a89b 100644 --- a/code/constant.h +++ b/code/constant.h @@ -29,6 +29,21 @@ //Largeur image : 39 #define SOLDIER_WIDTH 78 +/** + * \brief Point de vie par défaut du joueur + */ +#define SOLDIER_HP 10 + +/** + * \brief Valeur de l'inrémentation des ennemis à chauqe manche + */ +#define INCREMENTATION_ENEMIES 3 + +/** + * \brief Nombre d'ennemis à la première manche + */ +#define NUMBER_ENEMIES_START 5 + /** * \brief Hauteur de l'ennemie */ diff --git a/code/file_management.c b/code/file_management.c index 6d83ba48bfb5fb3e60b9317dcd86005234956126..18770b7f32edc41a6b793269f336864b56b2e346 100644 --- a/code/file_management.c +++ b/code/file_management.c @@ -16,6 +16,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[4]; for(int i = 0; i < nb_lines/2; i++) { fseek(file, deplacement[i],SEEK_CUR); diff --git a/code/main.c b/code/main.c index 632e07c1c68f64b85e50dc8549b8061e085cc895..6e9302114fa45e1eb8133912302120745fde8d3f 100644 --- a/code/main.c +++ b/code/main.c @@ -18,7 +18,6 @@ void init(SDL_Window **window, SDL_Renderer ** renderer, resources_t *resources, int main(void) { SDL_Event event; // Événements liés à la fenêtre - //bool terminer = false; resources_t resources; world_t world; SDL_Window *window; // Déclaration de la fenêtre @@ -26,7 +25,6 @@ int main(void) srand(time(NULL)); double time; - // Initialisation de la SDL if(SDL_Init(SDL_INIT_VIDEO) < 0) { @@ -48,18 +46,9 @@ int main(void) renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);; + //Initialiser les données du monde et les ressources d'affichage init(&window,&renderer,&resources,&world); - /*int* dataSave; - dataSave = getDataSave("../data/save.txt"); - for(int i = 0; i < 4; i++) - { - dataSave[i] += 5; - } - setDataSave("../data/save.txt",dataSave);*/ - - //load_save(); - //Timer Uint64 t1 = SDL_GetPerformanceCounter(); Uint64 t2 = 0; diff --git a/code/round_management.c b/code/round_management.c index c04d7f7374dd5d54f5042e0743cc3a57150bb9c5..be2e185e6d27eb4bf424e43402b4b38f19e6cc40 100644 --- a/code/round_management.c +++ b/code/round_management.c @@ -2,18 +2,6 @@ #include <stdlib.h> #include <stdio.h> -/*void load_save() -{ - int* dataSave; - dataSave = getDataSave("../data/save.txt"); -} - -void save_game() -{ - -}*/ - - int isRoundEnded(round_t *round) { for (int i = 0; i < round->number_enemies; ++i) @@ -29,13 +17,14 @@ int isRoundEnded(round_t *round) void initFirstRound(round_t *round, int nbEnemies, int incrementation) { - round->round_number = 0; + round->round_number = 1; round->number_enemies = nbEnemies; round->incrementation = incrementation; round->counter = 0; round->index_to_spawn = 0; round->is_new_round = 0; createEnemies(round); + printf("Ennemis : %d Incrementation : %d\n",round->number_enemies,round->incrementation); } //Actualiser qui se déplace @@ -47,7 +36,7 @@ void updateRound(round_t *round) round->index_to_spawn++; } round->counter++; - if(round->counter == 500) + if(round->counter == 50) { round->counter = 0; } diff --git a/code/round_management.h b/code/round_management.h index 2c7766bcdae2e9edacd02367dec91f4d57617725..ae748b8e95f5663aea8d25f8c919f453ab9455db 100644 --- a/code/round_management.h +++ b/code/round_management.h @@ -18,7 +18,6 @@ struct round_s */ typedef struct round_s round_t; - int isRoundEnded(round_t *round); void initFirstRound(round_t *round, int nbEnemies, int incrementation); diff --git a/code/world_data.c b/code/world_data.c index 67a0687b6a9f792dc2c85cbcdf30ce38dac02998..acba8a1a0b0e176b12191ec3d047c0ae93362920 100644 --- a/code/world_data.c +++ b/code/world_data.c @@ -19,23 +19,61 @@ void print_sprite(sprite_t*sprite) printf("HP: %d \n",sprite->hp); } +int* load_save() +{ + //Récupérer les données de la sauvegarde + int* dataSave; + dataSave = getDataSave("../data/save.txt"); + + int *dataToAdd = malloc(sizeof(int)); + //Initialiser les valeurs par défaut + dataToAdd[0] = SOLDIER_HP; + dataToAdd[1] = NUMBER_ENEMIES_START; + dataToAdd[2] = INCREMENTATION_ENEMIES; + + //PV du joueur + if(dataSave[0] > 0 && dataSave[0] < 31) + { + dataToAdd[0] = dataSave[0]; + } + + //Nombre d'ennemis + if(dataSave[1] > 0 && dataSave[1] < 21) + { + dataToAdd[1] = dataSave[1]; + } + + //Incrémentation du nombre d'ennemis + if(dataSave[2] > 0 && dataSave[2] < 11) + { + dataToAdd[2] = dataSave[2]; + } + return dataToAdd; +} + +void save_game(world_t *world) +{ + int dataSave[4]; + dataSave[0] = world->soldier.sprite.hp; + dataSave[1] = world->rounds.number_enemies; + dataSave[2] = world->rounds.incrementation; + dataSave[3] = 30; + setDataSave("../data/save.txt",dataSave); +} void init_data(world_t *world) { //Chargement de la sauvegarde - int incrementation = 1; - int nbEnemis = 4; + int* data = load_save(); //Chargement de la première manche - initFirstRound(&world->rounds,nbEnemis,incrementation); + initFirstRound(&world->rounds,data[1],data[2]); //Initialisation du soldat - init_soldier(&world->soldier,10); + init_soldier(&world->soldier,data[0]); setBulletD(&world->soldier); - //init_enemy(&world->enemy); - init_supplying(&world->supplying,1); //world->DestBullet = malloc(sizeof(SDL_Rect)*NB_BULLET); @@ -172,6 +210,7 @@ void handle_events(SDL_Event *event,world_t *world) if( event->type == SDL_QUIT || event->key.keysym.sym == SDLK_ESCAPE) { //On indique la fin du jeu + save_game(world); //Libère la mémoire du tableau DestBullet pour l'affichage free(world->soldier.DestBullet); clearEnemies(&world->rounds); diff --git a/code/world_data.h b/code/world_data.h index ea980c16f264ca07c15188e3b33e89b035b811d6..71d503e82eac8df63fc64d932194762776a592d4 100644 --- a/code/world_data.h +++ b/code/world_data.h @@ -2,8 +2,9 @@ #define __WORLDDATA_H__ #include <time.h> -#include "constant.h" #include "round_management.h" +#include "file_management.h" +#include "constant.h" #include "powerUp.h" #include <SDL2/SDL.h> #include "math.h" //Nécessaire pour la collision entre deux sprites @@ -27,6 +28,10 @@ typedef struct world_s world_t; void init_data(world_t * world); +int* load_save(); + +void save_game(world_t *world); + void handle_events(SDL_Event *event,world_t *world); void refresh_data(world_t *world); diff --git a/data/save.txt b/data/save.txt index 8acea06a8fc6ef4aa6fa7b308014877050c926c5..b6216b901f05fa92548275658185f45fbd8fc970 100644 --- a/data/save.txt +++ b/data/save.txt @@ -1,8 +1,8 @@ /Vie du joueur au début -275 +10 /Nombre d'ennemis au début -305 +15 /Nombre d'ennemis en plus à chaque manche -267 +5 /Nombre de balles -295 +30