From 9f04bee59a752ebc4d103b0a9369dc7ab9043935 Mon Sep 17 00:00:00 2001 From: vautrin33u <vautrin33u@etu.univ-lorraine.fr> Date: Wed, 25 Nov 2020 13:52:05 +0100 Subject: [PATCH] =?UTF-8?q?Tentatives=20de=20construction=20de=20sprites?= =?UTF-8?q?=20dans=20un=20tableau=20-=20=C3=A0=20corriger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logique.c | 29 +++++++++++++++++++++++------ logique.h | 14 +++++++++++--- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/logique.c b/logique.c index 63034b2..f173f52 100644 --- a/logique.c +++ b/logique.c @@ -27,7 +27,7 @@ void init_data(world_t * world){ //faux build_sprite_unique(&world->lavabo, 'L', LAVABO_LARGEUR, LAVABO_HAUTEUR, world->map); build_sprite_unique(&world->poubelle, 't', POUBELLE_LARGEUR, POUBELLE_HAUTEUR, world->map); build_sprite_unique(&world->envoi, 'e', ZONE_ENVOI_LARGEUR, ZONE_ENVOI_HAUTEUR, world->map); - build_sprites_tab(&world, 'X', BLOC_COMPT_SIZE, BLOC_COMPT_SIZE); + build_sprites_tab(world, 'P', BLOC_COMPT_SIZE, BLOC_COMPT_SIZE, NB_COMPT_1); /* @@ -77,15 +77,27 @@ void build_sprite_unique (sprite_t *sprite, char nom, int largeur, int hauteur, if (comptX == hauteur && comptY == largeur){ init_sprite(sprite, nom, x, y, hauteur, largeur, 0, 0); } + print_sprite(sprite); } -void build_sprites_tab (world_t* world, char nomSprite, int largeur, int hauteur){ - - for (int i=0; i<SCREEN_HEIGHT; i++){ - for (int j=0; j<SCREEN_WIDTH; j++){ - //Parcours du tableau pour repérer le premier caractère d'un +void build_sprites_tab (world_t* world, char nomSprite, int largeur, int hauteur, int nb_sprites){ + + int index = 0; + for (int i=0; i<SCREEN_HEIGHT; i+= hauteur){ + for (int j=0; j<SCREEN_WIDTH; j+= largeur){ + //Parcours du tableau pour repérer le premier caractère d'un sprite + if (world->map[i][j] == nomSprite){ + init_sprite(&world->comptoire[index], nomSprite, j-SIZE_MUR, i-SIZE_MUR, largeur, hauteur, 0, 0); + if (index+1<nb_sprites){ + index++; // on incrémente vers le sprite suivant, a condition qu'il y ai assez de place prévu pour + } + } } } + for (int i=0; i<nb_sprites; i++){ + print_sprite(&world->comptoire[i]); + } + } void init_sprite(sprite_t *sprite, char nom, int x, int y, int w, int h, int v, int state){ //faux @@ -100,6 +112,11 @@ void init_sprite(sprite_t *sprite, char nom, int x, int y, int w, int h, int v, sprite->nom = nom; } +void print_sprite (sprite_t *sprite){ + // Fonction permettant d'afficher les données contenues dans un sprite + printf("nom : %c -- x= %d | y=%d | w= %d | h= %d | v= %d | visible : %d \n", sprite->nom, sprite->x, sprite->y, sprite->w, sprite->h, sprite->v, sprite->is_visible); +} + int aleatoire (int a, int b){ // Fonction générant une valeur aléatoire entre a (inclu) et b (exclu) return rand()%(b-a)+a; diff --git a/logique.h b/logique.h index da6a5bf..b88f544 100644 --- a/logique.h +++ b/logique.h @@ -38,7 +38,7 @@ struct sprite_s{ typedef struct sprite_s sprite_t; -struct world_s{ +struct world_s{ int gameover; /*!< Champ indiquant si l'on est à la fin du jeu */ sprite_t joueur; /*!< Sprite du joueur */ sprite_t four; /*!< Sprite du four */ @@ -72,6 +72,13 @@ typedef struct world_s world_t; */ void init_sprite(sprite_t *sprite, char nom, int x, int y, int w, int h, int v, int state); +/** + * @brief Affiche certains éléments d'un sprite + * + * @param sprite + */ +void print_sprite (sprite_t *sprite); + /** * @brief Fonction initialisant un unique sprite (meuble) * @@ -86,12 +93,13 @@ void build_sprite_unique (sprite_t *sprite, char nom, int largeur, int hauteur, /** * @brief Fonction initialisant un tableau de sprites * - * @param world données du monde - contenant la map et les spirtes concernés + * @param world données du monde - contenant la map et les sprites concernés * @param nomSprite Caractère du Sprite sur la carte * @param largeur Largeur du sprite * @param hauteur Hauteur du sprite + * @param nb_sprites nombre d'éléments max dans le tableau de sprite */ -void build_sprites_tab (world_t* world, char nomSprite, int largeur, int hauteur); +void build_sprites_tab (world_t* world, char nomSprite, int largeur, int hauteur, int nb_sprites); /** * \brief la fonction permet de rendre visible un sprite -- GitLab