
Envoyé par
bachir008
ok merci, c'est gentil de ta part. J'ai deja rencontré ce genre de probleme,il suffit de changer l'ordre de declaration des variables pour que ça marche.
Ca c'est inquiétant comme remarque tout de même.
Mais j'ai trouvé le problème.
1) Pourquoi déclarer ton tableau comme ceci :
char m_decor[HAUTEUR_PAR_CASES][LARGEUR_PAR_CASES+1];//les sprites du niveau
Tu n'utilises pas la dernière case de chaque ligne par la suite. En fait tu fais cela à cause de '\n' qui se trouve dans le fichier de données. Est-ce que tu trouves vraiment que c'est de la bonne programmation de stocker une case de plus parce que ton fichier d'entrée a une donnée en plus par ligne ? Ne serait-ce pas mieux de virer le '\n' à chaque lecture ?
Ensuite dans ta lecture tu faisais ceci :
fgets(m_decor[i], LARGEUR_PAR_CASES+2, niveau);
Ce qui est encore pire puisque tu dis au programme que ton tableau est plus grand que ce qu'il est.
La solution plus propre serait de faire :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
char buf[2*LARGEUR_PAR_CASES], *ptr;
...
for(int i = 0; i < HAUTEUR_PAR_CASES; i++){
fgets(buf, sizeof(buf), niveau);
ptr = strchr(buf, '\n');
if(ptr == NULL) {
std::cerr << "Probleme avec chargement de la carte" << std::endl;
return EXIT_FAILURE;
}
*ptr = '\0';
int j = 0;
while((j<LARGEUR_PAR_CASES) && ( buf[j] != '\0')) {
m_decor[i][j] = buf[j];
j++;
}
} |
Ensuite attention à ceci :
1 2 3 4 5 6 7 8 9 10 11
| void jouer(SDL_Surface *ecran, bool &continuer){
...
jouer(ecran, continuer);
SDL_PollEvent(&event);
switch(event.type){
case SDL_QUIT://si le joueur appuie sur la croix
continuer = false;
break;
}
...
} |
- Tu fais une récursive qui pourrait un jour faire sauter la pile
- Il faut tester le retour de SDL_PollEvent
Jc
Partager