CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[SFML] Probleme modification de tableau

unitedelite29
unitedelite29
Niveau 10
29 mai 2011 à 12:25:37

bonjour tout le monde, j’apprends actuellement la SFML et pour commencer j'ai essayer de crée un petit bomberman mais j'ai un léger problème pour faire exploser ma bomb, j'ai un timers qui, lorsqu'il arrive a 5 change les cases adjacente du tableau et la c'est le drame, mon programme plante ...

le code => http://pastebin.com/eQZhM7Q2 (a la base je voulais juste faire un programme qui m'affiche un tableau 2D donc tout le code est en 1Fichier main.cpp (je compte, pour un autre projet le faire en plusieurs avec l'utilisation de la POO))

début ->
http://www.hostingpics.neet/viewer.php?id=234278pb1.png

placement de la bomb et timer lancé (le perso est sous la bomb mais peut toujours ce déplacer -> http://www.hostingpics.neet/viewer.php?id=536245pb2.png

Erreur (on vois qu'il est bien rentré dans la condition (grace au "Boom!" mais crash lorsqu'il doit changer le tableau) ->
http://www.hostingpics.neet/viewer.php?id=255304pb5.png

merci de votre aide.

Pocolo
Pocolo
Niveau 10
29 mai 2011 à 12:55:54

A mon avis tu sors des limites du tableau.

unitedelite29
unitedelite29
Niveau 10
29 mai 2011 à 13:10:30

merci tu ma aider a trouver la solution ^^

en faite j'avais oublier de diviser les coordonner par 32, ce qui fait que je me retrouver en transformer une case trop grande (par exemple 300)

merci sa fonctionne maintenant ^^

tbop2
tbop2
Niveau 10
29 mai 2011 à 16:18:40

Ah les bon vieux main de 300 lignes en SFML sont légions de nos jours !

Un petit conseil, tu devrais foutre tout ton code dans une nouvelle classe qui s'appelerait par exemple Game.

Ensuite tu découpes toutes tes parties de la façon suivante :

le constructeur intialise le bas du bas de la sfml

Une méthode Initialize qui charge toutes tes ressources.

Une méthode CatchEvent qui s'occupe de récupérer tous les events gérés et qui change le minimum de données nécessaires pours préparer à la méthode suivante :

La méthode update, ici tu calcules tout ce que tu as à calculer. AI, collisions, nouvelles coordonnées, profondeurs. C'est le centre de ta boucle.

La méthode draw, ici tu t'occupes seulement d'afficher ce qui a été jugé d'afficher dans la méthode update. C'est pas la méthode la plus compliquée normalement.

Une méthode qui désinitialize tes ressources. A toi de voir où tu comptes la placer mais dans tous les cas il faut y penser !

Le tout sera bouclée dans une méthode Run qui pourra renvoyer un int en fonction de la raison de sa sortie (erreur, sortie normale) et qui ressemblera très grossièrement à ça :

int Game::Run()
{
...while(IsRunning())
...{
......CatchEvent();
......Update();
......Draw();
...}
...
...return mExitState;
}

Ton main quant à lui va passer de 300 lignes à 3 lignes :

void main()
{
...Game myGame = new Game();
...myGame.Initialize();
...
...int errorno = myGame.Run();
...
...//Un petit switch en fonction des résultats de ta sortie
...
...
... return 0;
}

elhuron
elhuron
Niveau 6
29 mai 2011 à 22:59:38

Uhuh, ca me rappelle la fois ou j'avais codé un de mes premiers petit jeu en mode console, j'avais mis presque tout le code dans main.h... :)

caelacanthe
caelacanthe
Niveau 10
29 mai 2011 à 23:14:28

ca me rappelle la fois ou j'ai codé mon premier jeu de shoot, j'avais un .h de 700 lignes et un .cpp de 6000 lignes. pas de classes, ni de paradigme objet, que des fonctions et des structures (plus pratique pour regrouper des variables) :hap:

Pocolo
Pocolo
Niveau 10
29 mai 2011 à 23:19:10

Je pense que tout le monde a fait ça a un moment donné.

D'ailleurs je le fais encore quand je m'aventure sur un nouveau truc (quand j'apprends a utiliser une nouvelle librairie par exemple) d'abord je fais un truc tout moche sans classes ou quoi que ce soit et sur un seul fichier et je me focalise juste sur la compréhension du code, mais la je parle de projets de test que je garde pour moi.

C'est plus facile et rapide que de commencer direct a essayer de faire du code ordonné avec un truc que l'on ne connaît pas, et une fois qu'on a bien compris le truc on peut faire du joli code optimisé. :oui:

unitedelite29
unitedelite29
Niveau 10
30 mai 2011 à 09:57:07

j'ai un autre problème ...

je suis en train de refaire le jeu en plusieurs fichier (j'etait suffisamment loin dans le "jeu" pour le recommencer au propre)
mais je tombe sur une erreur lors de l'affichage du tableau, le problème c'est le Sprite "spriteMur", dés que je veut l'afficher il plante (j'ai échangé les découpage de l'image contenant les sprite (donc herbe affiche mur et mur affiche herbe et sa fonctionne) et il s'agit toujours de spriteMur qui plante, spriteHerbe lui s'affiche correctement lorsqu'il est seul)

voila le code du fichier "jeu.cpp" :
http://pastebin.com/QgGQuxUB

merci de votre aide ^^

tbop2
tbop2
Niveau 10
30 mai 2011 à 10:22:12

Aaaaaah si tu refactores le jeu c'est une tres bonne initiative, c'est aussi le moment parfait pour le decouper comme je te l'ai conseille xD

A quelle ligne ca foire dans ton code ?

unitedelite29
unitedelite29
Niveau 10
30 mai 2011 à 10:33:20

pur ce que tu ma conseiller je n'ai pas appris comme sa donc sa me parais assez "confus", je vais vraiment voir la méthode que tu ma dite juste après ce projet ^^ (j’attends de savoir bien utiliser la sfml =°)

pour le problème j'ai aucune erreur dans la compil juste un "le programme a cessé de fonctionner", quand je lance le debug j'ai ça =>
http://www.hostingpics.net/viewer.php?id=822912Capture.png

je vais finir mon café et après je vais tenter d'afficher le niveau avec un fichier sprite séparé.

unitedelite29
unitedelite29
Niveau 10
30 mai 2011 à 10:43:28

Je viens d'essayer avec un fichier image sépare, il refusent d'afficher mon spriteMur, le programme plante.

unitedelite29
unitedelite29
Niveau 10
30 mai 2011 à 11:05:22

je viens d'inverser Sprite spriteHerbe, spriteMur; (ce qui donne Sprite spriteMur,spriteHerbe) et la j'arrive a afficher spriteMur mais plus spriteHerbe ...

tbop2
tbop2
Niveau 10
30 mai 2011 à 11:10:24

Si tu connais bien ton code normalement ce n'est pas trop confus, surtout que ton code correspond exactement a ce que j'ai dit donc c'est juste trois quatre copier coller et trois quatre fonctions en plus. Il n'y a rien de technique normalement, en plus j'ai un peu detaille. Refactore tout de suite je t'assure, ce genre de bons reflexes n'ont pas besoin d'attendre :)

Ok donc c'est la ligne 91 apparement qui foire selon toi (pareil toujours indiquer la ligne, la fonction qui crash dans un code, on va pas parser 150 lignes de code pour ton seul plaisir).

Bon il va falloir que tu en dises plus sur la tronche de spriteMur. Est-ce qu'il est pas null au moins ?
Je suis etonne que sfml te donne pas plus de renseignement que ca, il doit y avoir un exception ou un truc qui cloche que tu dois pouvoir voir dans le code source lui-meme qu'a la ligne 395 ya un petit probleme. (je n'ai pas la sfml donc il va aussi falloir que tu copies un petit bout de cette partie sur pastebin).

tbop2
tbop2
Niveau 10
30 mai 2011 à 11:13:02

Sinon les petits trucs en passant :

"for(int y(0); y <= NB_BLOCK_HAUTEUR; y++)"

Personnellement j'ai toujours vu une initialisation de int de la forme suivante int y = 0;

Pourquoi un tableau de char pour niveau? Ca parait un peu etrange comme ca en apparence, pourrais tu m'en dire plus ?

unitedelite29
unitedelite29
Niveau 10
30 mai 2011 à 11:27:03

j'initialise directement le "y" dans la boucle , il est supprimé a la fin du for.

les char c'est parce que mon tableau niveau est générer a partir d'un fichier txt qui mélange chiffre et lettre, je trouvais sa plus simple de le mettre en char.

pour la ligne qui foire je pense que c'est dés que je crée les sprite (ligne 20( (le 1er sprite fonctionne bien, les suivant sa plante))

voici le drawnable.cpp => http://pastebin.com/6b8nGziG (je ne pense pas qu'il est le problème vue que dans l'autre programme ou tout est dans le main il fonctionne)

on peut pas définir une surface par défaut aux sprites (enfin il me semble)

tbop2
tbop2
Niveau 10
30 mai 2011 à 12:34:17

Oui mais on initialise plutot de cette forme la int y = 0, int y(0) c'est un peu strange sur les bords par convention.

Well, le probleme vient pas de drawable mais c'est la ou il termine son chemin. Encore une fois es-tu sur que ton sprite n'est pas null ?

unitedelite29
unitedelite29
Niveau 10
30 mai 2011 à 13:02:42

résolut, probleme de signe lors de du remplisage du tableau ("<=" au lieu de "<")

merci de ton aide en tout cas ^^

tbop2
tbop2
Niveau 10
30 mai 2011 à 14:16:08

C'est a dire ? Quelle etait la repercussion sur ton sprite alors ?

unitedelite29
unitedelite29
Niveau 10
30 mai 2011 à 14:19:48

le tableau que je crée était trop grand ce qui fessait planter le programme lorsque je voulais le remplir.

après ce qu'il ce passé exactement j'en ai aucune idée!

tbop2
tbop2
Niveau 10
30 mai 2011 à 14:58:43

Attends comment tu peux avoir regle un bug si tu n'as pas compris ce qu'il s'est passe.

Tu veux dire que tu parcourais un tableau qui etait plus petit que tu ne le pensais non tout simplement ?

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment