Problème de fonction
leoufdu78170
-
leoufdu78170 -
leoufdu78170 -
Salut a tous !
Je code actuellement un petit RPG en C avec la lib graphique SDL.
Le jeu est presque fini d'être codé.
Je vais situer le problème.
Alors, le principe, c'est de se balader dans des donjons a la recherche d'artefact.
Dans ces donjons se trouvent des ennemis.
J'ai codé une fonction combat qui se déclenche lorsqu'il y a collision entre un ennemi et le héros.
La fonction combat renvoi 1 si le héros (nous) gagne ce combat.
Maintenant, le coeur du problème : lorsque je gagne mon combat, je n'arrives pas a retourner correctement dans le donjon, ça affiche le donjon, mais je ne peux plus bouger, le jeu plante.
Voila les parties du code concernées :
dans donjon.c, l'appel de combat :
et dans combat.c, le test de victoire et le renvoi :
Je code actuellement un petit RPG en C avec la lib graphique SDL.
Le jeu est presque fini d'être codé.
Je vais situer le problème.
Alors, le principe, c'est de se balader dans des donjons a la recherche d'artefact.
Dans ces donjons se trouvent des ennemis.
J'ai codé une fonction combat qui se déclenche lorsqu'il y a collision entre un ennemi et le héros.
La fonction combat renvoi 1 si le héros (nous) gagne ce combat.
Maintenant, le coeur du problème : lorsque je gagne mon combat, je n'arrives pas a retourner correctement dans le donjon, ça affiche le donjon, mais je ne peux plus bouger, le jeu plante.
Voila les parties du code concernées :
dans donjon.c, l'appel de combat :
for(i=0;i<nbEnnemis;i++) { if (mechant[i].vaincu ==0) afficherSprite(&mechant[i].rect,m,mechant[i].img,screen); } for(i=0;i<nbEnnemis;i++) { if (collisionEnemy(s->position,mechant[i].rect) && mechant[i].vaincu == 0) { if (combat(&s, &mechant[i])==1) mechant[i].vaincu = 1; else exit(0); } } reset(&vx,&vy); SDL_Flip(screen); displayMap(m,screen);
et dans combat.c, le test de victoire et le renvoi :
if (hero->PV <= 0) // si le héros perd { victoire = 0; continuer = 0; } if (mechant->PV <= 0 ) // si le mechant perd { victoire = 1; continuer = 0; } } //fin de la fonction combat SDL_FreeSurface(fond_map); SDL_FreeSurface(ecran); SDL_FreeSurface(img_pv); SDL_FreeSurface(img_pm); SDL_FreeSurface(img_ennemi); SDL_FreeSurface(img_daemon1); SDL_FreeSurface(img_daemon2); SDL_FreeSurface(boutonmenu); SDL_FreeSurface(boutonmenu2); SDL_FreeSurface(fondmenu); SDL_FreeSurface(pointeur); SDL_FreeSurface(img_pv); SDL_FreeSurface(img_pm); SDL_FreeSurface(boom); for(i;i=0;i<3,1) { SDL_FreeSurface(img_perso[i]); } for(i;i=0;i<20,1) { SDL_FreeSurface(text[i]); } if (victoire == 0) // si le héros perd, gameover gameover(); else // sinon, si le méchant perd, retourne 1 { return 1; }
A voir également:
- Problème de fonction
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
4 réponses
Salut.
Je ne connais pas SDL, mais j'ai peut être quelques pistes.
Si tu ne combats pas d'ennemis, le jeu fonctionne bien, c'est à dire que ton problème vient de la fonction combat.
Le truc que je vois qui peux faire merdé, ce sont tout les SDL_Free, tu doit modifier l'état du jeu et ça ne lui plait pas.
Ou alors c'est le passage d'argument à combat qui est mauvais. Je vois un "&s", là où je me serai attendu à simplement "s", car s est déjà un pointeur.
Je ne connais pas SDL, mais j'ai peut être quelques pistes.
Si tu ne combats pas d'ennemis, le jeu fonctionne bien, c'est à dire que ton problème vient de la fonction combat.
Le truc que je vois qui peux faire merdé, ce sont tout les SDL_Free, tu doit modifier l'état du jeu et ça ne lui plait pas.
Ou alors c'est le passage d'argument à combat qui est mauvais. Je vois un "&s", là où je me serai attendu à simplement "s", car s est déjà un pointeur.
Yo ! Merci de t'intéresser au problème :)
Alors, déjà, c'est pas du au passage du pointeur, parce que la fonction combat fonctionne bien.
Je vais regarder du coté des free et freeSurface, ta peut être raison.
En fait, le jeu ne crash pas vraiment, mais la musique du combat reste, et le donjon réapparaît mais a moitié de la fenêtre (car je n'utilise pas le même résolution pour le combat que pour le donjon) et je ne peux plus bouger.
http://image.noelshack.com/fichiers/2013/27/1372850816-hh.png
Alors, déjà, c'est pas du au passage du pointeur, parce que la fonction combat fonctionne bien.
Je vais regarder du coté des free et freeSurface, ta peut être raison.
En fait, le jeu ne crash pas vraiment, mais la musique du combat reste, et le donjon réapparaît mais a moitié de la fenêtre (car je n'utilise pas le même résolution pour le combat que pour le donjon) et je ne peux plus bouger.
http://image.noelshack.com/fichiers/2013/27/1372850816-hh.png