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

Free Pascal Discussion :

Création d'un lecteur d'histoires à l'aide d'enregistrements


Sujet :

Free Pascal

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 22
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Création d'un lecteur d'histoires à l'aide d'enregistrements
    Bonsoir,
    Je souhaiterais acquérir quelques aides au sujet d'un projet informatique en cours de réalisation. Mon projet étant de créer un lecteur d'histoires interactives. Le héros se déplace en effet sur un plateau, et tout du une histoire se déroule, permettant au joueur de réaliser des choix au cours de son aventure. Tout cela à partir de fichier.
    Le problème étant : j'aimerais pouvoir afficher des parties de l'histoire en fonction de l'activité du joueur. Et pour cela, je ne sais pas comment stocker les informations du fichier afin de ne récupérer que les parties correspondantes.
    Je pensais d'abord réaliser un fichier texte présenté de la façon suivante :
    1
    Il était une fois....#
    2
    blablbalablab#
    Le '#' étant le "signal" d'arrêt d'une boucle possible. J'ai tenté d'utiliser des tableaux et de stocker chaque partie de l'histoire dans une ligne du tableau. Permettant ainsi de réaliser une numérotation des parties (tab[i]). Néanmoins, mon code ne semble pas fonctionner à merveille et rien que l'aperçu n'est pas des meilleurs. C'est pourquoi je souhaitais explorer une autre piste conseiller par mon professeur, les enregistrements. Mais j'avoue être complètement perdue quant à l'assignation des informations aux différentes structures... Serait-ce sous forme d'Array? Ou de String..?

    Si je pouvais avoir un quelconque brin d'espoir par rapport à tout cela, ce serait vraiment gentil...
    En tout cas, merci de vos futures réponses !

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Intéressant comme projet. C'est difficile comme ça de vous aider. Qu'est-ce qui n'allait pas exactement, avec votre première idée ? Si c'est juste que ça ne marchait pas, ça peut toujours s'arranger.

    Autrement, je ne suis pas sûr de comprendre ce que vous voulez faire avec des enregistrements. Si c'est ce que je pense (stocker votre ensemble de textes dans un fichier d'enregistrements), vous pourrez peut-être lire avec profit cette discussion : opérations sur un fichier d'enregistrements

    Après, l'idée d'un seul fichier texte, convenablement formaté, ce n'est pas mal non plus. Ou alors plusieurs fichiers numérotés...
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 22
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Bonjour !

    Intéressant comme projet. C'est difficile comme ça de vous aider. Qu'est-ce qui n'allait pas exactement, avec votre première idée ? Si c'est juste que ça ne marchait pas, ça peut toujours s'arranger.

    Autrement, je ne suis pas sûr de comprendre ce que vous voulez faire avec des enregistrements. Si c'est ce que je pense (stocker votre ensemble de textes dans un fichier d'enregistrements), vous pourrez peut-être lire avec profit cette discussion : opérations sur un fichier d'enregistrements

    Après, l'idée d'un seul fichier texte, convenablement formaté, ce n'est pas mal non plus. Ou alors plusieurs fichiers numérotés...
    Bonjour à vous!
    Merci beaucoup de votre réponse.. Je vous mets le code que j'ai pour l'instant pour que vous puissiez y jeter un oeil. Je n'en suis pour l'instant qu'au début donc le plateau n'est pas encore relier à la lecture de l'histoire (ce sera sûrement compliquer mais j'aimerais relier position du personnage à une partie d'histoire du coup.

    Le problème pour l'instant, j'ai chargé l'histoire dans un tableau 1D composé seulement de ligne mais je n'arrive pas à ne faire afficher qu'une partie de celle-ci. Je pense que le problème vient de la procédure Lecture car j'utilise histoire [i] afin de lire les strings mais ça ne fonctionne pas ici, nénanmoins je ne vois pas comment faire..

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    program test;
     
    uses crt, sysutils;
    const MAX=10;
     
    Type THistoire = Array [1..MAX] of String;
     
     
    procedure chargementhistoire(FileName : String; var History : THistoire);
    var fic	: Text;
       str	: String;
       j : Integer;
    begin
    	if (FileExists(FileName)) then
    	begin
    		assign(fic,FileName);
    		reset(fic);
    		while (not eof(fic)) do
    			begin
    				readln(fic,str); 
    				j:=0;
    				History[j]:=str;
    				writeln(History[j]);
    				j:=j+1;
    			end;
    	end
    	else
    		begin
    			writeln('Erreur le fichier n''existe pas');
    			halt();
    		end;
    end;
     
    procedure lecture(var history : THistoire);
    var i: Integer;	
    	begin
    		i:=0;
    		if history[i] = 'Introduction (0)' then
    			begin
    				while history[i] <> '#' do
    					begin
    						writeln(history[i]);
    						i:=i+1;
    					end;
    			end;
    	end;
     
     
    var FileName : String;
    	History : THistoire;
    BEGIN
    	writeln('Quel est le nom du fichier?');
    	readln(FileName);
    	chargementhistoire(FileName, History);
    	lecture(History);
    END.
    J'ai aussi jeté un oeil à votre lien proposé, c'est assez complet mais je vous avoue avoir du mal à comprendre voire à imaginer, est-ce qu'assigner un fichier déjà existant est possible? Je comprends les structures lors de l'utilisation avec des données mais lors de l'utilisation de fichiers j'ai beaucoup de mal..

    Merci de votre aide o/ (et pardon je viens de me rendre compte que le site a cassé toute mon indentation--)

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Dans la procédure ChargementHistoire, il faut initialiser la variable j avant la boucle, autrement elle reste toujours à zéro. Et il faut l'initialiser à 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      j:=1;
      while (not eof(fic)) do
      begin
        readln(fic,str); 
        //j:=0;
    Dans la procédure Lecture aussi, il faut initialiser la variable à 1.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 22
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Dans la procédure ChargementHistoire, il faut initialiser la variable j avant la boucle, autrement elle reste toujours à zéro. Et il faut l'initialiser à 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      j:=1;
      while (not eof(fic)) do
      begin
        readln(fic,str); 
        //j:=0;
    Dans la procédure Lecture aussi, il faut initialiser la variable à 1.
    C'était ce que j'avais fait pour j... Néanmoins, lors de l'exécution, le programme bug et me lance tout un charabia informatique très rapidement...

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Fernus-Rth Voir le message
    C'était ce que j'avais fait pour j... Néanmoins, lors de l'exécution, le programme bug et me lance tout un charabia informatique très rapidement...
    Qu'est-ce qu'il y a dans votre fichier ? Dans le mien j'ai mis ceci :

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Introduction (0)
    bla
    bla
    #
    coucou

    Si vous voulez mettre quelque chose avant ou après le #, il faut changer cette condition, qui est trop restrictive :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while history[i] <> '#' do
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 22
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Ah oui en effet, mon # n'était pas à la ligne...
    Le problème du bug est réglé. Néanmoins, l'histoire s'affiche toujours entièrement...

    mon fichier texte ressemble à ça :
    Introduction (0)
    Il était une fois blalblablablab.
    #

    PartieUne
    Un lapin se faisait manger par un crabe.


    PartieDeux
    Le crabe se fit poursuivre par le chevalier errant.

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Fernus-Rth Voir le message
    Néanmoins, l'histoire s'affiche toujours entièrement...
    Ah tiens, c'est bizarre : ça m'avait paru fonctionner. Peut-être serait-il bon que vous attachiez votre fichier en pièce jointe, pour qu'on puisse faire des essais sur le même fichier que vous.

    Mais de toute façon votre système de délimitation des différentes parties du texte est à améliorer, car j'imagine que vous ne voudrez pas réafficher à chaque fois toute l'histoire depuis le début. Il vous faudrait quelque chose dans ce genre :

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #01
    bla
    #02
    suite
    #03
    etc.

    Comme ça, si vous voulez par exemple afficher la partie commençant par #02, vous n'avez qu'à sauter tout ce qui précède et tout afficher jusqu'à ce que vous ayez trouvé une autre ligne commençant par #.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 22
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Hmmm au final, l'erreur venait du fichier texte lui-même.. Le programme ne lisait pas les sauts de ligne. J'ai donc dû tout coller et cela fonctionnait! Nénamoins merci de vos éclaircissements!

    Entre un tableau 1D et un tableau 2D, que penseriez-vous être le plus intéressant pour le projet?

  10. #10
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Fernus-Rth Voir le message
    Entre un tableau 1D et un tableau 2D, que penseriez-vous être le plus intéressant pour le projet?
    Un tableau à une dimension me paraît plus simple. En fait je ne vois pas trop à quoi pourrait servir la deuxième dimension.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 22
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Je vois, je vois.
    C'est un camarade de mon groupe qui avait fait le même programme que moi mais avec un tableau 2D.
    Il avait fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    program teststructure;
     
    uses crt, sysutils;
    const MAX=10;
     
    type matrix=array[1..10,1..10]of string;
    var a1:matrix;
    var FileName : String;
     
     
    procedure chargementhistoire(var a:matrix);
    var 
        t:text;
        numhis,i:integer;
        txt:string;
    begin
     assign(t,'story.txt');
     reset(t);
     for numhis:=1 to 2 do
      begin
      i:=1;
       repeat
       begin
       readln(t,txt);
       a[numhis,i]:=txt;
       i:=i+1;
       end;
       until txt='*';
     end;
    end;
     
    procedure lecture(a:matrix;numhis:integer);
    var i: Integer;	
    	begin
    		for i:= 1 to 10 do
            writeln(a[numhis,i]);
     
    	end;
     
     
    BEGIN
    	writeln('Quel est le nom du fichier?');
    	{readln(FileName);}
    	chargementhistoire(a1);
    	lecture(a1,1);
     
     
    END.
    Je ne sais pas trop quelle serait la différence néanmoins..

Discussions similaires

  1. Création d'un lecteur audio simple
    Par thelpi dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/12/2007, 21h53
  2. Création d'un lecteur l'images
    Par ghost emperor dans le forum Windows Forms
    Réponses: 12
    Dernier message: 25/10/2007, 19h47
  3. [WD10] aide pour la création d'un lecteur multimédia
    Par marge62500 dans le forum WinDev
    Réponses: 7
    Dernier message: 12/03/2007, 17h13
  4. [JAVALayer] Création d'un lecteur MP3
    Par chesteric31 dans le forum Multimédia
    Réponses: 5
    Dernier message: 09/10/2005, 14h21

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