|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() kevin baesÉtudiant Inscription : janvier 2013 Messages : 222 ![]() |
bonjour
alors voila je cherche a manipuler un fichier dynamiquement . se que j'entend par la c'est que j'ai une gestion d'une carte avec des coffre sur cette carte les emplacement et les information a la carte sont dans un fichier lu au demarrage pour charger la carte. je voudrais que quand j'ouvre un coffre il le mette ouvert definitivement car quand je change de carte et revient dessus les coffres sont a nouveau dispo hors je ne veut pouvoir les ouvrirs qu'une fois. j'ai penser a renseigner avec des tellg les positions des infos a changer puis une fois que je tomber sur une des infos je changer mais cela ne me parait pas forcement top. du coup auriez vous des solutions plus beau car je cherche a faire un code relativement bien ecris qui pourrai etre compris par tout le monde |
|
|
00
|
|
|
#2 |
|
Membre éprouvé
![]() Étudiant Inscription : février 2012 Messages : 206 ![]() |
Il faut que tu lises le fichier une seule fois (au début du programme) pour charger ses informations dans l'une de tes classes. Une fois le chargement fait, tu fermes le fichier. Les cartes utiliseront une seule instance de cette classe (et ne travaillent pas avec le fichier).
|
|
|
00
|
|
|
#3 | ||||||||||||
|
Membre du Club
![]() kevin baesÉtudiant Inscription : janvier 2013 Messages : 222 ![]() |
C'est déjà le cas mais quand je sort d'une carte à une autre je recharge un autre fichier du coup quand je repasse a l'autre carte plus tard il recharge encore le fichier du coup les coffres ouvert seront à nouveau fermer.
voici le code pour voir un peu le système Code :
Code :
Code :
Code :
Code :
Code :
|
||||||||||||
|
|
00
|
|
|
#4 |
|
Membre éprouvé
![]() Étudiant Inscription : février 2012 Messages : 206 ![]() |
Je n'ai pas lu le code mais il te suffit de stocker tes cartes dans une std::map et faire le chargement de la carte demandée si celle-ci n'est pas trouvée dans la std::map.
|
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() kevin baesÉtudiant Inscription : janvier 2013 Messages : 222 ![]() |
C'est ce que fait déjà le code est cela fonctionne très bien mais pas assez pour modifier tout ce qu'il faut quand il faut.
|
|
|
00
|
|
|
#6 |
|
Membre éprouvé
![]() Étudiant Inscription : février 2012 Messages : 206 ![]() |
Il faut donc que tu ajoutes un "état" à ton coffre.
Soit avec un booléen, soit en mettant son contenu à vide. |
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() kevin baesÉtudiant Inscription : janvier 2013 Messages : 222 ![]() |
Le problème en soit n'est pas d'ouvrir le coffre cela l'ouvre bien et passe à l’état ouvert.
Le problème c'est que le coffre est directement lié à la map donc quand on change de map puis revient dessus la coffre ouvert précédemment revient en mode fermé car le fichier n'as pas été modifié donc dans le fichier il est toujours fermer bien qu'il ait été ouvert c'est pour cela que je voulais modifier le fichier directement. |
|
|
00
|
|
|
#8 |
|
Membre éprouvé
![]() Étudiant Inscription : février 2012 Messages : 206 ![]() |
Tu parles de deux exécutions différentes (du même programme) ?
Si non, il ne faut pas créer plusieurs fois la même carte, on la stocke quelque part en attendant qu'elle soit réutiliser (la conversion précédente). Si oui, tu peux réécrire le fichiers des coffres (mis à jour) dans le destructeur de la carte. |
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() kevin baesÉtudiant Inscription : janvier 2013 Messages : 222 ![]() |
Je t'explique il va charger un fichier contenant un bout de carte ( exemple : une ville) puis lorsque il va sortir de la ville il va charger un autre fichier carte ( exemple : foret) dans cette foret il y a imaginons 3 coffre il va les ouvrir.
il va rechanger de carte par exemple retour dans la ville donc rechargement de la carte ville et imaginons pour x ou y raison il décide de retourner dans la carte foret bah il rechargera encore la carte foret mais vue que les coffres sont intégrer dans la map donc dans le fichier il ne seront pu ouvert mais fermer ( un peu comme zelda quand tu casse les pot puis revient dans la pièce il sont à nouveau là ) |
|
|
00
|
|
|
#10 | |
![]() ![]() Cyrille Network programmer Inscription : juin 2010 Messages : 1 539 ![]() |
Citation:
A chaque action, tu le réécris, vu qu'il est réouvert à chaque entrée sur la map. |
|
|
|
00
|
|
|
#11 |
|
Membre du Club
![]() kevin baesÉtudiant Inscription : janvier 2013 Messages : 222 ![]() |
Je me doute mais y a t-il pas un moyen plus beau que cela car je trouve cela pas très top
|
|
|
00
|
|
|
#12 |
|
Expert Confirmé Sénior
![]() |
Dans tous les cas, l'état d'ouverture des coffres doit rester en mémoire, qu'on recharge la map elle-même à chaque fois qu'on y entre ou qu'on la garde en mémoire.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
|
|
#13 |
|
Membre du Club
![]() kevin baesÉtudiant Inscription : janvier 2013 Messages : 222 ![]() |
re
alors je voudrais savoir car je ne suis pas sur est il possible de supprimer un mot dans un fichier ou sans forcement le supprimer le remplacer par un autre ? |
|
|
00
|
|
|
#14 |
|
Expert Confirmé Sénior
![]() |
Modifier un fichier texte, c'est long, car il faut copier tout le fichier jusqu'à la partie qu'on veut modifier, la modifier puis copier le reste, puis supprimer l'ancien et renommer le nouveau.
Un fichier binaire, avec des enregistrements de longueur fixe, peut être modifié sur-place plus facilement. Mais ce qu'on te dit, c'est de ne pas toucher à tes maps originales. L'état des coffres, ce doit être une variable de la partie en cours, pas un composant des maps qu'on modifierait. Tu peux par exemple tenir une liste/map des coffres déjà ouverts, et la sauvegarder dans un fichier séparé, avec la position courante et les points de vie du héros. Prenons un exemple concret: Dans les Zelda 2D depuis ALTTP, différentes variables d'un donj' ont différentes durées de vie:
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
|
|
#15 |
|
Membre du Club
![]() kevin baesÉtudiant Inscription : janvier 2013 Messages : 222 ![]() |
Non mais la je suis d'accord j'ai tout modifié pour pouvoir mettre dans des variables mais voila le problème c'est que l’état du coffre est un string (ouvert ou fermer) qui se trouve dans le fichier de la carte donc quand je lis il place le et tout grasse aux infos mais je voudrais modifier l’état donc quand il est ouvert a la fin je veux changer dans le fichier le mot fermer en ouvert donc que un mot. Est-ce possible ?
|
|
|
00
|
|
|
#16 |
|
Expert Confirmé Sénior
![]() |
L'état du coffre, c'est une string uniquement dans le fichier. En mémoire, ce doit être un bool.
Et cet état, tu n'as pas à la sauvegarder dans la carte. Tu ne modifies jamais la carte dans le fichier. Tous les événements appartiennent à la partie courante. En gros, si le joueur retourne dans cette pièce, tu dois vérifier cette mémoire juste après avoir chargé la carte (et là si tu veux, tu peux la modifier en mémoire).
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
|
|
#17 |
|
Membre du Club
![]() kevin baesÉtudiant Inscription : janvier 2013 Messages : 222 ![]() |
dans se cas la comment la garder tout le temps en mémoire sans que elle soit effacer au bout d'un moment par une autre donnée
|
|
|
00
|
|
|
#18 |
|
Expert Confirmé Sénior
![]() |
Avec une std::map, par exemple.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
|
|
#19 |
|
Membre du Club
![]() kevin baesÉtudiant Inscription : janvier 2013 Messages : 222 ![]() |
peut on faire une std::map d'une std::map exemple
Code :
std::map<std::map<Position, string>, string> ou encore Code :
flux.insert(make_pair(insert(make_pair(Position,string)), string) |
|
|
01
|
|
|
#20 | |||
![]() ![]() Loïc JolyDéveloppeur informatique Inscription : août 2004 Messages : 4 671 ![]() |
Citation:
Citation:
Citation:
Je me demande si en fait, tu ne voudrais pas plutôt une map<Position, map<string, string>>, ou toute autre combinaison où la seconde map est liée à la valeur plus qu'à la clef.
__________________
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11. |
|||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com