Bonjour à tous,
Je suis étudiant en informatique et j'ai un projet à rendre pour la fin de semaine prochaine.
J'ai pratiquement fini, mais j'ai un gros soucis, j'ai voulu faire quelques affichages à l'écran et je ne sais pas pourquoi, mais j'obtiens des segmentation fault...
Les affichages que je voulais faire : Le score en bas du jeu, un message de changement de niveau entre chaque niveau.
Voici mon code :
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 string point(int niveau) { ostringstream mssg; mssg.flush(); mssg.str(""); mssg << niveau; return mssg.str(); } bool switchLvl(SDL_Surface* screen, Canard &c, Canard &c2, SDL_Surface *fond, int compteurBalles, SDL_Event event, int &niveau, bool etatJeu, bool &init, int &tour) { TTF_Font *font; SDL_Color textColor= {0,0,0}; applySurface(0,0,fond,screen,NULL); ostringstream mssg; mssg.flush(); mssg.str(""); mssg << "Niv"; ostringstream n; mssg.flush(); mssg.str(""); mssg << niveau; ostringstream mssg2; mssg.flush(); mssg.str(""); mssg << "Cliquez pour continuer"; font = TTF_OpenFont("duck_hunt.ttf",30); if (init==true) { niveau++; init=false; } initCanard(c,niveau); initCanard(c2,niveau); compteurBalles=0; // showMessageScreen("niveau",SCREEN_WIDTH/3,SCREEN_HEIGHT/3.3,font,30,textColor,screen); // showMessageScreen(point(niveau),SCREEN_WIDTH/2,SCREEN_HEIGHT/3.3,font,30,textColor,screen); // showMessageScreen("Cliquez pour continuer",SCREEN_WIDTH/4,SCREEN_HEIGHT/2,font,30,textColor,screen); while(SDL_PollEvent(&event)) { if (event.button.state==SDL_PRESSED) { tour=0; } } SDL_Flip(screen); TTF_CloseFont(font); return etatJeu; }
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 void showMessageScreen(string message,int x,int y, TTF_Font *font,int fontSize,SDL_Color textColor,SDL_Surface* &screen) { string mot=""; string space=" "; int i=0,j; SDL_Surface *mes=NULL; j = message.find(space); while( j != string::npos ) { mot=message.substr(i,j-i); if(mot != "") { mes=TTF_RenderText_Solid(font,mot.c_str(),textColor); applySurface(x,y,mes,screen,NULL); x+=mes->w; SDL_FreeSurface(mes); } x+=fontSize; i=j+1; j = message.find(space,i); } mot=message.substr(i); mes=TTF_RenderText_Solid(font,mot.c_str(),textColor); applySurface(x,y,mes,screen,NULL); SDL_FreeSurface(mes); }
Je n'ai pas mis le code pour le score parce que je suppose que le problème est le même...
Le code de la fonction showMessageScreen nous à été fournit par notre professeur.
Vous verrez des osstringstreametc un peu en vrac à un endroit, je les avais utilisé pour faire de multiples tests et ne plus avoir de segfault mais sans succès....
Merci d'avance et bonne journée
Partager