-
Bonjour,
je débute en c++ ainsi que dans l'utilisation de SFML et j'ai une question concernant les tileMap.
j'ai (en suivant le tuto : https://www.sfml-dev.org/tutorials/2.4/graphics-vertex-array-fr.php) créé une map.
Est-il possible de remplir le tableau level (créé et utilisé dans l'exemple) avec un fichier txt ? Si oui, comment ?
j'ai essayer de le faire en ouvrant le fichier en lecture et en utilisant un tableau dynamique mais je n'y arrive pas :(
-
Ca c'est du C++ de base, rien à voir avec la SFML ;)
Tu devrais plutôt t'orienter vers des livres / tutoriels / cours en ligne plus spécialisés, les entrées/sorties avec les fichiers textes ça fait partie des sujets de base, tu devrais facilement trouver ton bonheur.
-
c'est ce que j'ai fait (je me base sur le tuto: https://openclassrooms.com/courses/programmez-avec-le-langage-c)
Mais probablement par ce que je débute, je n'arrive pas a faire quelque chose de correct :'(
Mon dernier essai:
std::ifstream monFlux("demoSol.txt");
std::vector <int> tableau;
std::string str;
while (!monFlux.eof())
{
int nombre;
monFlux >> nombre;
tableau.push_back(nombre);
}
for (int a = 0; a < tableau.size(); a++)
{
std::cout << tableau[a] << std::endl;
}
Merci quand même de m'avoir répondu ^^ et désolé si ma question étais hors sujet
-
Le code correct serait :
int nombre;
while (monFlux >> nombre)
tableau.push_back(nombre);
(il y a une autre version, mais c'est pour les gens un peu plus expérimentés ;))
Et donc, quel est la sortie que tu obtiens avec ton code ?
-
Il y a quelque chose que je dois mal comprendre :-\
j'ai d'abord ajouter ton code:
std::ifstream monFlux("demoSol.txt");
std::vector <int> tableau;
int nombre;
while (!monFlux.eof())
{
while (monFlux >> nombre);
tableau.push_back(nombre);
}
for (int a = 0; a < tableau.size(); a++)
{
std::cout << tableau[a] << std::endl;
}
std::cout << tableau.size() << std::endl;
Rien ne semble s'afficher.
Ensuite je me suis dit que c'était mon "while (!monFlux.eof())" qui devait poser problème. je l'ai donc supprimé:
std::ifstream monFlux("demoSol.txt");
std::vector <int> tableau;
int nombre;
while (monFlux >> nombre);
tableau.push_back(nombre);
for (int a = 0; a < tableau.size(); a++)
{
std::cout << tableau[a] << std::endl;
}
std::cout << tableau.size() << std::endl;
Et là quand je parcourt le tableau il n'affiche qu'un seul nombre et une taille de 1
Je suppose donc que le problème vient de la manière dont je lis le fichier
Mais je trouve pas de solution :(
-
En effet il fallait retirer le "while (!monFlux.eof())".
Quel est le contenu de ton fichier ?
-
Une liste d'entier séparé par des virgules.
"25,25,85,47,65,55,etc..."
-
Et comment std::ifstream est-il censé savoir que ton séparateur est la virgule ? Par défaut ce sont les espaces (et tabulations et retours à la ligne). Remplace donc ces virgules par des espaces, et ton code fonctionnera parfaitement.
-
En fait je créé mes map avec un éditeur de map (Tiled) et je l'exporte ensuite sous forme de fichier txt (avec lequel j'utilise le même tileset) dans mon projet sfml .
Malheureusement les virgules sont ajouté automatiquement :(
Est il possible d'utiliser une virgule comme séparateurs? si oui comment ?
Parce que sa risque de me prendre un moment pour enlevé les virgules a chaque map créé :(
Ou alors as tu une autre méthode a me conseiller pour créé et gérer les maps?
Dans tous les cas merci pour tes réponses et conseils. :)
-
Il y a plein de projets ici qui traitent de l'importation de map issues de Tiled dans un programme SFML, tu as déjà regardé ?
Tu peux utiliser std::getline, qui accepte un troisième paramètre qui est le caractère de séparation. Ensuite, pour chaque sous-chaîne extraite, il faut refaire une conversion en entier. Ou alors tu lis tout ton fichier dans une chaîne, tu remplaces ',' par ' ', puis tu extraies comme tu le fais actuellement.
-
ok je vais jeter un coup d’œil à tous ça
encore merci :)
-
Attention aussi !
while (monFlux >> nombre);
tableau.push_back(nombre);
Il ne faut pas mettre le point virgule à la fin du while !
-
C'est pas un problème les virgules.
Sur le bloc note tu fais Edition>Remplacer
Dans rechercher tu mets "," et dans Remplacer Par tu mets " ".
Puis tu appuies sur Remplacer tout.
Il n'y a rien de compliqué!D'ailleurs la plupart des éditeurs de texte possède une fonction pour remplacer un mot par un autres.