Utilisation de structure dans d'autres fichiers
Bonsoir,
Je suis entrain de faire un petit RPG en SDL, un truc assez simpliste pour m'entrainer.
Pour l'instant j'ai 6 fichiers dans mon projet :
- main.c et main.h
- personnage.c et personnage.h (qui contient des fonctions concernant les sprites)
- map.c et map.h (qui permet de créer ma map)
Dans chacun des mes fichiers .c, j'inclus sont .h (dans mon main.c j'inclus main.h, et respectivement dans personnage.c et map.c).
Dans mes fichiers .h j'inclus mes deux autres fichiers .h (dans main.h j'inclue personnage.h, et map.h, et respectivement dans les autres .h)
Voici le code qui se trouve dans mes .h
- main.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #ifndef DEF_MAIN
#define DEF_MAIN
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
//On inclu les autres fichiers .h
#include "personnages.h"
#include "map.h"
#define LARGEUR_FENETRE 800
#define HAUTEUR_FENETRE 600
#define NOMBRE_DE_COULEUR 32
typedef enum {BAS,GAUCHE,DROITE,HAUT} Direction;
typedef struct
{
int x;
int y;
}TailleImage;
typedef struct
{
Direction direction;
SDL_Rect position, imageAAfficher;
int vitesse;
char imageActuelle[50];
SDL_Surface *imageCourante;
int tempsAnimation;
int nombreImageAnimation;
int animation;
int animationCourante;
int estAnime;
TailleImage tailleCharset;
TailleImage tailleSprite;
} Personnage;
- Personnage zelda; |
-personnage.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #ifndef DEF_MAIN
#define DEF_MAIN
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
//On inclu les autres fichiers .h
#include "main.h"
#include "map.h"
#define ADRESSE_IMAGE 100
typedef enum {BAS,GAUCHE,DROITE,HAUT} Direction;
typedef struct
{
int x;
int y;
}TailleImage;
typedef struct
{
Direction direction;
SDL_Rect position, imageAAfficher;
int vitesse;
char imageActuelle[50];
SDL_Surface *imageCourante;
int tempsAnimation;
int nombreImageAnimation;
int animationCourante;
int animation;
int estAnime;
TailleImage tailleCharset;
TailleImage tailleSprite;
} Personnage;
//Prototype des fonctions
void AffichagePersonnage(SDL_Surface *ecran, Personnage *perso);
void DeplacementPersonnage(SDL_Surface *ecran, int directionPerso, Personnage *perso);
int chargerImage(Personnage *perso, char adresseImage[ADRESSE_IMAGE], int transparence, int tailleCharsetX, int tailleCharsetY, int animation, int tempsAnimation, int nombreAnim, int direction, int animHaut, int animBas, int animDroite, int animGauche, int positionX, int positionY);
#endif |
- map.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #ifndef DEF_MAP
#define DEF_MAP
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
//On inclu les autres fichiers .h
#include "main.h"
#include "personnages.h"
#define LARGEUR_TILESET 32
#define HAUTEUR_TILESET 32
#define LARGEUR_FENETRE 800
#define HAUTEUR_FENETRE 600
#define NOMBRE_DE_COULEUR 32
#define MARGE_CHIPSET 1
typedef struct //Contient les infos sur les chipset
{
//Coordonnées des chipset
int x;
int y;
int collision; //Peut-on traverser le chipset ?
SDL_Rect position, source;
}Chipset;
typedef struct //Contient les infos sur notre Map
{
int largeurMap;
int hauteurMap;
int nombreTile; //Le nombre de tiles que possède la map
Chipset *chipset; //On utilise notre struct créer précédement
int decalageMapX;
int decalageMapY;
int largeurTile;
int hauteurTile;
int departY;
int nombreDeChipsetParLigne;
SDL_Surface *tile; //L'image du tiles
}Map;
//Prototypes des fonctions
void InitialisationMap(Map *map);
void AffichageTiles(Map *map, int largeurMap, int hauteurMap, SDL_Surface *ecran, char *chipset, int departY, int couleurTransparenceR, int couleurTransparenceG, int couleurTransparenceB);
void RechercheEtEnregistrementChipsetClique(Map *map, int coordSourisX, int coordSourisY, SDL_Surface *ecran);
#endif |
Voila, donc voici mes différentes questions :
On peut remarquer que dans main.h et perso.h, j'ai déclaré plusieurs fois les mêmes structures. Si par exemple j'enlève ma structure Personnage et Direction de mon personnage.h il me dit que je n'ai pas déclarer mes strucures et sa plante.
En faite je pensais que je n'aurais qu'a déclarer mes structures Personnage et Direction dans mon main.h et pouvoir les réutiliser dans mon personnage.h.
Mais apparament je suis obligé de redeclarer mes structures dans tout mes .h
Deuxième gros problème dans mon code, dans mon personnage.h, mes premières lignes sont :
#ifndef DEF_MAIN
#define DEF_MAIN
Logiquement je devrais avoir :
#ifndef DEF_PERSONNAGE
#define DEF_PERSONNAGE
Mais quand je fais ceci il me dit :
"redefinition de variable blablabla..."
Voila, donc j'aurais besoin de votre aide concernant ces deux soucis svp ;)
A+