Salut j'ai un gros problème; j'ai une fonction qui bug et je ne peux pas savoir quel est le problème car lorsque je lance le programme en mode debug ça marche sans problème, ça m'est déjà arrivé il y un bout de temps et je voudrais savoir pourquoi ça se passe comme ça, comment y remédier et j'aimerais bien aussi qu'on m'aide avec cette fonction
La fonction génère une variable contenant les données d'une map (constituée de plusieurs plans).
Voici la variable :
Les données sont contenues dans des fichiers :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 typedef struct TMAP { int w, h,//Largeur et hauteur de la map (en nombre de tiles) tw, th,//Largeur et hauteur de chaque tile plannb;//Nombre de plans **tilesinfos,//Informations sur chaque tile (tangible ou pas, etc ...) ***map,//Matrice de tiles(map[plan numéro i][xème tile en partant de lagauche][yème plan partant du haut] loadinfo;//Information sur le chargement (si le pointeur sur fichier ou surface égal NULL) SDL_Surface **tileset;//Les tilesets (tileset[plan numéro i]) }TMAP;
Un fichier "datas" qui contient la largeur et la hauteur en nombre de tiles de la map, la largeur et la hauteur des tiles ainsi que le nombre de plans de la map
Un fichier _%dxd (%d est le numéro du plan) qui contient le nombre de tiles différents constituant le plan, leurs données (qui ne sont qu'un nombre 8 bits) et la couleur transparente
Un fichier _%dxt (%d est le numéro du plan) qui n'est rien d'autre que le tileset du plan
Et voici la fonction qui la charge :
(Ca bloque autour des lignes 56~64)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 TMAP loadtiledmap (const char *mapname) { TMAP map; char adress [200]; int tilenb = 0, i, j, plani; Uint32 alpha; FILE *file=NULL; map.loadinfo = 0; //--------------------Fichier primaire("data") sprintf (adress, "maps/%s/datas", mapname); file = fopen (adress, "r"); if (!file) { map.loadinfo = -1;//Code d'échec de chargement de fichier primaire return map; }; fscanf (file, "%dx%dx%dx%dx%d\n", &map.w, &map.h, &map.tw, &map.th, &map.plannb);/*Données primaires : largeur et hauteur de la map en nombre de tiles, largeur et hauteur des tiles et nombre de plans*/ map.map = (char***)malloc (map.plannb*sizeof (char**));µ/*Allocation d'autant de matrices de tiles que de plans*/ map.tileset = (SDL_Surface**)malloc (map.plannb*sizeof (SDL_Surface*));/*Allocation d'autant de tilesets que de plans*/ map.tilesinfos = (char**)malloc (map.plannb*sizeof (char*));/*Allocation d'autant de tableaux d'informations sur les tiles que de plans*/ fclose (file); //---------------------Fichier de plans for (plani = 0; plani < map.plannb; plani++)//Boucle for pour charger les données de chaque plan { sprintf (adress, "maps/%s/_%dxd", mapname, plani);//Adresse du plan file=fopen (adress, "r");//Ouverture du fihier de plan i if (!file) { map.loadinfo = -2;//Code d'échec de chargement de fichier de plan return map; }; fscanf (file, "+%d+%d\n", &tilenb, &alpha);//Nombre de tiles + canal alpha du plan map.tilesinfos [plani] = (char*)malloc (tilenb);//Allocation des infos des tiles for (i=0;i<tilenb;i++)fscanf (file,"%d,", (int*)&map.tilesinfos[plani][i]);/*Chargement des infos de tiles*/ fscanf (file, "\n");//Retour à la ligne map.map [plani] = (char**)malloc (map.w*sizeof (char*));//Allocation du nombre tiles en largeur for (i=0;i<map.w;i++)map.map[plani][i]=(char*)malloc (map.h);//Allocation du nombre tiles en hauteur for (j=0; j<map.h;j++) { for (i=0;i<map.w;i++) { fscanf (file, "%d.", (int*)&map.map [plani][i][j]);//Lecture du tile de coordonnée {i;j} }; fscanf (file, "\n");//retour à la ligne après la ligne de tiles }; fclose (file); 56 sprintf (adress, "maps/%s/_%dxt", mapname, plani);//Adresse du tileset 57 58 map.tileset [plani] = SDL_LoadBMP (adress);//Chargement du tileset 59 if (!map.tileset [plani]) 60 { 61 map.loadinfo = -3;//Code d'echec du chargement du tileset 62 return map; 63 }; 64 SDL_SetColorKey (map.tileset [plani], SDL_SRCCOLORKEY, alpha);//Application de la transparence }; return map; };
Et enfin les fichiers à charger :
Fichier datas
Fichier _0xd30x30x32x32x1
Les fichiers n'ont pas de problème.+3+0
0,0,0,
0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.
1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.
0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.
1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.
0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.
1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0
0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.
1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.
0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.
1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.1.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.
Le bug de chargement survient à partir de 30 tiles de hauteur et/ou de largeur.
Merci !
Partager