IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Texte affiché dans un programme: base de données


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut Texte affiché dans un programme: base de données
    Salut!

    J'avance à petits pas en C++, mais il me semble que je vois de plus en plus loin.

    J'ai écrit un programme qui s'utilise via la console standard, c'est-à-dire que je ne gère que tu texte, et que je l'affiche ligne par ligne sans rien réécrire.

    Bref: comme l'essentiel de l'interface se fait par texte (entrées par l'utilisateur, affichage de texte par l'ordinateur), j'ai un bon gros paquet de texte à afficher.

    Ma première idée a consisté à tout écrire directement dans le programme. Le point faible de cette technique, c'est que mon texte est éparpillé partout, et assez peu lisible en général. Je pense que cette solution ne sera envisageable que pour de petits programmes (corrigez-moi si je me trompe).

    Ma deuxième idée, c'était de réunir tout mon texte dans un fichier .txt que le programme lit à chaque fois qu'il a quelque chose à afficher. J'utilise une fonction pour ça, et mon fichier .txt est criblé de balises (pour dire au programme "lis de 056 à 058", et tout).
    Mon texte est réuni au même endroit, mais le travail est alors relativement fastidieux (erreurs en écrivant les balises, aussi bien dans le programme que dans le fichier texte...). De plus, j'ai l'impression que l'exécution du programme est un peu lente...

    Maintenant, j'ai eu une troisième idée: je pourrais créer une fonction qui contienne un while{switch(step)}, et il me suffirait ensuite d'appeler cette fonction en précisant le numéro de "step" pour afficher le bloc de texte que je veux (et chaque "case" finirait par "step=..." pour sortir de la boucle et remonter dans le programme, cela va de soi).

    LA QUESTION EST ICI:
    Vaut-il mieux choisir la deuxième ou la troisième solution pour un programme efficace? Quand je dis efficace, je dis rapide (à l'exécution) et léger (taille des fichiers).

    Mon avis (de néophyte), c'est que la troisième solution est plus sûre, parce qu'on m'a appris à toujours prévoir une sortie de secours au cas où le fichier texte à lire devait être introuvable (genre: afficher "Erreur système" ou un truc du genre, et fermer l'application). Logiquement, si j'écris mont texte dans le code, ce problème n'aura jamais lieu (à moins d'un bug sérieux)...

    Je suppose que la réponse peut être trouvée en décortiquant mon compilateur. Malheureusement, je suis encore incapable de faire ce cheminement...

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    je n'ai pas vraiment compris ce que tu tentes d'expliquer dans ta méthode 3.
    Un while et un switch pour afficher du texte ???

    Le mieux est d'avoir un fichier qui stocke ton texte et d'initialiser une fois pour toute au démarrage du programme des variables (typiquement des map) dans lesquelles piocher ce que tu souhaites afficher.

    Autour de ce principe de base, tu peux articuler tout un tas de propriétés pour en faire ce que tu veux:
    - charger seulement une partie des textes que tu sais vas avoir besoin d'utiliser (dialogues de pnj dans un jeu, inutile de charger les dialogues des pnj avec lesquels on n'intéragit pas sur la map en cours)
    - multilangue, à l'initialisation ou à l'exécution
    - ton propre format de stockage
    - fichiers binaires, textes, db sql, ...
    ...
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    (Doublon)

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Salut Bousk, merci pour ta réponse.

    Le while, je viens de m'apercevoir qu'il n'était pas nécessaire.

    Je t'explique mieux comment ça "affiche du texte":

    En gros, tout mon texte sera écrit dans une fonction "AfficherTexte", qui demande un argument entier.
    Quand on appelle cette fonction, on donne l'argument qui correspond au bloc de texte qu'on veut afficher (chaque dialogue de PNJ, pour reprendre ton exemple, a un numéro précis).

    Dans "AfficherTexte" (je t'épargne les librairies), on a ça:
    - Un entier nommé "step" auquel est affecté l'argument de la fonction (le numéro du bloc de texte, tout ça...)
    - Un "switch(step)"
    - Dans chaque case, des instructions du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cout << endl; // Saut de ligne pour aérer le texte sur la console
    cout << "Bonjour Bousk, comment vas-tu?" << endl;
    cout << "Moi j'adore le chocolat!" << endl;
    Pour rappel, j'avais pensé à imbriquer mon "switch" dans un "while" par habitude, mais c'est pas nécessaire puisque ma fonction "AfficherTexte" ne sera appelée qu'une fois pour chaque bloc de dialogue.
    J'ai remarqué que le "while" n'était pas nécessaire quand je me suis aperçu que chaque "case" finissait par "step=10000", 10000 étant la valeur qui fait sortir du "while(step!=10000)"

    BREF! En fait, mon problème c'est que mon texte est hyper-chiant à écrire dans le .txt, et aussi dans le code.
    J'ai utilisé une fonction qui demande deux arguments de type "string", et ils doivent correspondre à des balises qui se trouvent dans mon texte. Après, la fonction "AfficherTexte" originale lit le fichier .txt dans rien afficher, et dès qu'elle rencontre la première balise, elle affiche tout ce qu'elle lit jusqu'à ce qu'elle trouve la deuxième balise. Ensuite, elle referme le fichier.
    De plus, cette méthode ne permet pas de gérer le rythme (ça affiche tout d'un coup), ou par exemple de demander à l'utilisateur de confirmer (en appuyant sur n'importe quelle touche). Je peux bien inscrire la temporisation dans mon fichier texte, mais à force, ce que je vais développer en C++, c'est un compilateur pour mon "code texte"... et encore, ça permettra pas de créer le jeu!

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Merci, tout va bien ici! =D

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/04/2007, 10h22
  2. Réponses: 3
    Dernier message: 19/12/2006, 01h16
  3. afficher la liste des bases de données dans oracle
    Par dalio2579 dans le forum Oracle
    Réponses: 4
    Dernier message: 19/04/2006, 16h31
  4. VB6] imprimer le texte afficher dans une picturebox
    Par Persons dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/08/2004, 11h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo