Bonjour,
comme le titre l'indique je suis en train de faire un jeu de labyrinthe avec la SDL en C , mais j'ai rencontré un probleme au cours du developpement de celui-ci , plus precisément lors du chargement de la map du labyrinthe , si quelqu'un se sent le courage de regarder un peu mon code source
(l'erreur n'est pas une erreure de compilation mais d'execution , a la fin du chargement de la map le programme reste en bug il ne fait rien et finit par planter...,) je sais deja que l'erreur est autour de ma fonction charger
:
main.c
charger.c:
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
68
69
70
71
72 #include <iostream> #include <SDL/SDL.h> #include <stdio.h> #include <stdlib.h> #include "charger.h" #include "constantes.h" #include "bouger.h" int main(int argc,char *argv[]) { SDL_Init(SDL_INIT_VIDEO); SDL_Rect position_joueur; int carte[32][32] = {0}; int continuer = 1; SDL_Event event; int erreure = AUTRES,fin = 1,i=1; while(fin) { position_joueur = charger_terrain(i,&carte); while(continuer) { SDL_WaitEvent(&event); return EXIT_SUCCESS; switch(event.type) { case SDL_QUIT: return 0; break; case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_a: erreure = bouger(GAUCHE,&carte,position_joueur); if(erreure == VICTOIRE) { i++; position_joueur = charger_terrain(i,&carte); } break; case SDLK_d: erreure = bouger(DROITE,&carte,position_joueur); if(erreure == VICTOIRE) { i++; position_joueur = charger_terrain(i,&carte); } break; case SDLK_w: erreure = bouger(HAUT,&carte,position_joueur); if(erreure == VICTOIRE) { i++; position_joueur = charger_terrain(i,&carte); } break; case SDLK_s: erreure = bouger(BAS,&carte,position_joueur); if(erreure == VICTOIRE) { i++; position_joueur = charger_terrain(i,&carte); } break; } break; default : break; }//switch }//while continuer }//while fin SDL_Delay(1500); }
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
68
69
70
71 #include "constantes.h" #include <iostream> #include <SDL/SDL.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include "charger.h" SDL_Rect charger_terrain(int niveau,int (*carte_Virtuelle)[32][32]) { char nomfich[500]; int caractereLU = 0; sprintf(nomfich,"labyrinthe%d.txt",niveau); SDL_Surface *mur,*vide,*bonhome,*ok,*ecran,*pos_bas; SDL_Rect position,positionFond,position_player; position.x = 0; position.y=0; ecran = SDL_SetVideoMode(990,990,32,SDL_HWSURFACE); mur = SDL_LoadBMP("mur.bmp"); pos_bas = SDL_LoadBMP("perso_droite.bmp"); vide = SDL_LoadBMP("vide.bmp"); ok = SDL_LoadBMP("ok.bmp"); FILE* fichier = NULL; int continuer = 1; fichier = fopen(nomfich,"r"); while(continuer) { caractereLU = fgetc(fichier); if(caractereLU == '\n') { position.y+=30; position.x=0; } if(caractereLU == 'a') { SDL_BlitSurface(vide,NULL,ecran,&position); (*carte_Virtuelle)[position.x/30][position.y/30] = VIDE; position.x+=30; } if(caractereLU == 'b') { SDL_BlitSurface(mur,NULL,ecran,&position); (*carte_Virtuelle)[position.x/30][position.y/30] = MUR; position.x+=30; } if(caractereLU == 'c') { SDL_BlitSurface(ok,NULL,ecran,&position); (*carte_Virtuelle)[position.x/30][position.y/30] = OK; position.x+=30; } if(caractereLU == 'j') { position_player.x = position.x; position_player.y = position.y; SDL_BlitSurface(pos_bas,NULL,ecran,&position); (*carte_Virtuelle)[position.x/30][position.y/30] = DROITE; position.x+=30; } if(caractereLU == 'EOF') { SDL_SaveBMP(ecran,"map.bmp"); return position_player; } SDL_Flip(ecran); } }
l'erreur e trouve dans ce fichier source je pense , car l'mage map.bmp ne veut pas s'enregistrer et grâce a des tests.
bouger.c:
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
68
69
70
71
72
73
74
75
76
77
78 #include <SDL/SDL.h> #include "constantes.h" #include "bouger.h" int bouger(int mouvement,int (*carte_Virtuelle)[32][32],SDL_Rect* position_joueur) { SDL_Surface *perso_gauche=NULL,*perso_droite=NULL,*perso_bas=NULL,*perso_haut=NULL,*ecranFOND,*ecran; ecranFOND = SDL_LoadBMP("map.bmp"); ecran = SDL_SetVideoMode(990,990,32,SDL_HWSURFACE); SDL_Rect positionFond; positionFond.x = 0; positionFond.y = 0; perso_gauche = SDL_LoadBMP("perso_gauche.bmp"); perso_droite = SDL_LoadBMP("perso_droite.bmp"); perso_bas = SDL_LoadBMP("perso_bas.bmp"); perso_droite = SDL_LoadBMP("perso_droite.bmp"); SDL_BlitSurface(ecranFOND,NULL,ecran,&positionFond); if(mouvement == BAS) { if((*carte_Virtuelle)[(position_joueur->x/30)][(position_joueur->y/30)+30] == MUR) { return ERROR; } if((*carte_Virtuelle)[(position_joueur->x/30)][(position_joueur->y/30)+30] == OK) { return VICTOIRE; } position_joueur->y += 30; SDL_BlitSurface(perso_bas,NULL,ecran,position_joueur); (*carte_Virtuelle)[position_joueur->x/30][position_joueur->y/30] = BAS; } if(mouvement == HAUT) { if((*carte_Virtuelle)[(position_joueur->x/30)][(position_joueur->y/30)-30] == MUR) { return ERROR; } if((*carte_Virtuelle)[(position_joueur->x/30)][(position_joueur->y/30)-30] == OK) { return VICTOIRE; } position_joueur->y -= 30; SDL_BlitSurface(perso_droite,NULL,ecran,position_joueur); (*carte_Virtuelle)[position_joueur->x/30][position_joueur->y/30] = HAUT; } if(mouvement == GAUCHE) { if((*carte_Virtuelle)[(position_joueur->x/30)-30][(position_joueur->y/30)] == MUR) { return ERROR; } if((*carte_Virtuelle)[(position_joueur->x/30)-30][(position_joueur->y/30)] == OK) { return VICTOIRE; } position_joueur->x -= 30; SDL_BlitSurface(perso_gauche,NULL,ecran,position_joueur); (*carte_Virtuelle)[position_joueur->x/30][position_joueur->y/30] = GAUCHE; } if(mouvement == DROITE) { if((*carte_Virtuelle)[(position_joueur->x/30)+30][(position_joueur->y/30)] == MUR) { return ERROR; } if((*carte_Virtuelle)[(position_joueur->x/30)+30][(position_joueur->y/30)] == OK) { return VICTOIRE; } position_joueur->x += 30; SDL_BlitSurface(perso_droite,NULL,ecran,position_joueur); (*carte_Virtuelle)[position_joueur->x/30][position_joueur->y/30] = DROITE; } }
Merci de votre aide,
Partager