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