Sujets-libres.fr

Informatique, logiciels libres, internet, humeurs et… le reste !

Bug ICC #2

Rédigé par -Fred- Aucun commentaire
Dans la série "ça plante parfois sans raisons apparentes..." :

Contexte :

Dans le jeu d'Action RPG que je développe, le perso peut collecter différents objets récoltable (cœurs, bombes, etc...).
Ces objets récoltables sont soit directement "posés" sur la carte, soit contenus dans d'autres objet (coffres, jarres, etc...). Certains objets peuvent très bien ne contenir aucun objet récoltable.

Ouvrir un coffre (pour prendre ce cas de contenant) permet au joueur de collecter son contenu et un coffre ouvert doit le rester pour le reste de la partie.
En simplifiant, cela implique que :
- La sauvegarde du joueur (fichier .txt à part) doit permettre à l'application de savoir si le coffre a été ouvert ou non.
- La sauvegarde du joueur (toujours le fichier .txt à part) doit être actualisée lorsqu'un coffre passe de l'état fermé à ouvert.
- L'application doit, en cas de modification, recharger les objets présents sur la carte où se trouve le joueur (les objets présents sur la carte sont stockés dans une list pnjObj et c'est le contenu de cette liste qui est rechargé au besoin)

Symptômes :

Sans raisons apparentes, l'application plantait parfois lorsque je tentais d'ouvrir un coffre fermé (me renvoyant au passage un sympathique "Segmentation fault").

Origine du problème :

C'était assez simple finalement (même si je n'ai pas trouvé directement).
Grossièrement, pour que le joueur puisse ouvrir un coffre, il faut deux conditions :
- Le joueur doit être au contact du coffre.
- Le joueur doit appuyer sur la touche "espace".

La première condition est testée tour à tour sur l'ensemble des objets présents sur la carte (list pnjObj).
S'il y a contact, alors l'appui sur espace permet :
- D'affecter le contenu du coffre au joueur.
- De mettre à jour la sauvegarde du joueur.
- De recharger les objets présents sur la carte (list pnjObj).

En clair, je modifiais une liste alors que j'étais en train de la parcourir.

Solution :

Résolu simplement en rechargeant la liste une fois son parcours terminé.

Écrire un commentaire

Quelle est la quatrième lettre du mot gspjg ?

Fil RSS des commentaires de cet article