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

ActionScript 3 Discussion :

Structure d'une aventure textuelle en AS3


Sujet :

ActionScript 3

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Points : 25
    Points
    25
    Par défaut Structure d'une aventure textuelle en AS3
    Bonjour tout le monde, j'aimerai faire en AS3, une aventure textuelle comme les anciens jeux d'aventures qui étaient dépourvus d'images, etc... xD

    alors j'ai mis en place un champs texte qui affiche tour à tour le récit, puis 2 autres champs (recouverts de 2 boutons en alpha "0"), où les choix sont affichés. Ensuite, j'ai fait ce petit schéma pour m'y retrouver et me calquer dessus par la suite ; c'est un "test".
    note : chaque ">" est un bouton en fait

    /* ---------------------------------------------------------------------------

    ------- etape 0000
    Cliquez pour prendre part à une aventure bien naze 8D
    > jouer goto etape 0001
    > options goto option
    > quitter end

    ------- etape 0001
    vous vous retrouvez dans une piece avec une porte ouverte...
    > vous partez goto etape 0002
    > vous restez goto etape 0003


    ------- etape 0002
    vous etes parti et vous etes sur un chemin
    > vous l'arpentez goto etape 0004
    > vous revenez à l'intérieur goto etape 0003


    ------- etape 0003
    Vous etes dans la piece. Et il y a une table que vous n'aviez pas vue, avec un gateau dessus
    > vous mangez le gateau goto etape 0005
    > vous partez finalement goto etape 0002


    ------- etape 0004
    Vous arrivez dans une foret bizarre, et vous vous endormez contre un rocher. Fin.
    > C'etait vachement court goto etape 0006


    ------- etape 0005
    Vous mangez le gateau et mourrez de sommeil, c'etait un vallium-cake super blindé xD
    > je trouve l'histoire debile goto etape 0006


    ------- etape 0006
    Bin vi, bin vi 8) A bientot pour de palpitantes nouvelles aventures


    --------------------------------------------------------------------------- */


    Une fois dans flash j'ai voulu faire une etape par frame, mais je me suis dit que ce serait bien mieux de tout mettre sur une seule frame, et de répartir les étapes sur la même page en AS3. Et surtout plus simple à gérer x)

    Alors j'ai commencé à faire ç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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    sn.text = "Scen001";
    ok.text = "vous vous réveillez et vous retrouvez une piece avec une porte ouverte...";
    At.text = "vous partez";
    Bt.text = "vous restez";
     
    A.addEventListener(MouseEvent.CLICK, Aok);	//merci
    function Aok(event:MouseEvent):void{
     
    	if (sn.text == "Scen001") {	sn.text = "Scen001";
    								ok.text = "Vous restez et vous regarder la piece. Il y un gateau sur la table.";
    								At.text = "je mange le gateau";
    								Bt.text = "je mange la table";}
     
    	if (sn.text == "Scen002") {	sn.text = "";
    								ok.text = "";
    								At.text = "";
    								Bt.text = "";}
     
    	if (sn.text == "Scen003") {	sn.text = "";
    								ok.text = "";
    								At.text = "";
    								Bt.text = "";}
     
    	if (sn.text == "Scen004") {	sn.text = "";
    								ok.text = "";
    								At.text = "";
    								Bt.text = "";}
     
    	if (sn.text == "Scen005") {	sn.text = "";
    								ok.text = "";
    								At.text = "";
    								Bt.text = "";}
     
    	if (sn.text == "Scen006") {	sn.text = "";
    								ok.text = "";
    								At.text = "";
    								Bt.text = "";}
     
    }
     
    B.addEventListener(MouseEvent.CLICK, Bok);	//merci
    function Bok(event:MouseEvent):void{
    	if (sn.text == "Scen001") {	ok.text = "645654654654654";}
    								At.text = "je reste";
    								Bt.text = "je pars";
     
    	if (sn.text == "Scen002") {	sn.text = "";
    								ok.text = "";
    								At.text = "";
    								Bt.text = "";}
     
    	if (sn.text == "Scen003") {	sn.text = "";
    								ok.text = "";
    								At.text = "";
    								Bt.text = "";}
     
    	if (sn.text == "Scen004") {	sn.text = "";
    								ok.text = "";
    								At.text = "";
    								Bt.text = "";}
     
    	if (sn.text == "Scen005") {	sn.text = "";
    								ok.text = "";
    								At.text = "";
    								Bt.text = "";}
     
    	if (sn.text == "Scen006") {	sn.text = "";
    								ok.text = "";
    								At.text = "";
    								Bt.text = "";}
     
    }
    //----------------------------------------------------------------------------------------------------------------------------
    Mais... j'ai l'impression que je m'y prend à l'envers et du coup je n'y arrive pas. Je ne me rend pas compte de l'histoire si j'organise le truc commme ça. Normalement on va d'étape en étape et l'action des boutons, suit. Avec mon écriture en AS3 là, j'ai l'impression que c'est l'inverse, et qu'on va d'étape en étape, mais pour chaque bouton, bref, je n'arrive pas à visualiser l'histoire en faisant comme ça.

    Le schéma je l'ai écrit en trois minutes, mais dans flash, je planche depuis une heure mdr et c'est prise de tête, hors si je me prends la tête pour 3 ou 4 etapes, qu'est-ce que ça va être quand il y en aura 200

    N'y a t il pas une façon d'écrire un bon vieux goto 0002, goto 0003 comme sur mon schéma de départ?

    Merci de vos conseils, et bonne année

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Points : 25
    Points
    25
    Par défaut
    Alors j'ai fait un autre test avec switch et case histoire de garder "un fil conducteur" dans l'histoire", mais je n'arrive pas à passer... de case 2 à case 5 puis à case 3 par exemple. Genre "goto case 5", donc ce n'est peut-être pas une bonne piste pour faire un text adventure game.

    Il y 1 champs et un bouton

    histre.text
    go (le bouton)

    Voici l'as3

    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
     
    var compteur	:int = 0;
     
    go.addEventListener(MouseEvent.CLICK, go1);
    function go1(event:MouseEvent):void{
    	compteur++;
    			switch(compteur) { 
    		//-----------------------------------------------------------------------------------------------------------------	01
        	case 1 : histre.text = "dqsdfq sf rthrth 1";
    				 break; 
    		//-----------------------------------------------------------------------------------------------------------------	02
        	case 2 : histre.text = "erty rte ty rty 2";
    				 break; 
    		//-----------------------------------------------------------------------------------------------------------------	03
        	case 3 : histre.text = "xc bvcx b 3";
    				 break;
    		//-----------------------------------------------------------------------------------------------------------------	04
        	case 4 : histre.text = "rtyu ty 4";
    				 break; 
    		//-----------------------------------------------------------------------------------------------------------------	05
        	case 5 : histre.text = "gfd 5";
    				 break; 
    		//-----------------------------------------------------------------------------------------------------------------	Arrêt et retour
        	default: histre.text = "fin";
    				 // retour à la conversation par défaut, la numéro "0" 8)
    				 break; 
    		}
    }
    Sinon...
    J'ai tenté une autre approche, avec un champ texte à remplir, et les mots clés voulus sont localisés dans ce que vous tapez (un peu le principe du tchatbot)... mais c'est le même problème, x/, quand je tape le mot clé "porte", il passe directement au troisième choix et zappe le second... Comment faire en sorte que le programme fasse la différence, afin de distinguer si oui ou non on a la clef qu'il faut pour ouvrir la porte...


    J'ai donc, 4 champs :
    lesinfos.text
    histoire.text
    zerepere.text
    monchoix.text

    Et voici l'as3:

    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
     
    	histoire.text = "Vous vous retrouvez dans une salle bizarre. Il y a une fenêtre, une porte et un coffre." +
    					"Que faîtes-vous?";
    	zerepere.text = "01";
     
    monchoix.addEventListener(KeyboardEvent.KEY_DOWN, zeclavier);
    function zeclavier(event:KeyboardEvent):void {
     
    	var aok01:String = monchoix.text;
     
    	if (event.keyCode == Keyboard.ENTER) {
    	// ----------------------------------------------------------------	Réponse par défaut si la réponse n'est pas prévue
    																		lesinfos.text = "Nan, ce n'est pas possible...";
    	// ----------------------------------------------------------------	Réponses par étapes...
    		if((aok01.indexOf("porte") != -1) && (zerepere.text = "01")){	histoire.text = "Vi, coucou aussi";
    																		zerepere.text = "02"; lesinfos.text = "Histoire - Chapitre 1";}
    		if((aok01.indexOf("porte") != -1) && (zerepere.text = "02")){	histoire.text = "Ah c'est la seconde fois mdr";
    																		zerepere.text = "03"; lesinfos.text = "Histoire - Chapitre 1";}
    		if((aok01.indexOf("porte") != -1) && (zerepere.text = "03")){	histoire.text = "Et de trois...";
    																		zerepere.text = "04"; lesinfos.text = "Histoire - Chapitre 1";}
    	// ----------------------------------------------------------------	Remise à zéro du champs
    	monchoix.text = "";
    	}
     
    }
    Si vous avez des idées je suis preneur, car là je tourne un peu en rond. L'objectif étant de faire un jeu destiné à smartphone android (c'est pourquoi l'idéal aurait été d'appuyer sur des boutons)...

    J'avais testé des logiciels comme Twine et ça "marche" mais... ce n'est pas super esthétique mdr, avec flash je m'y retrouve davantage puisque j'ai déjà fait des petits trucs pour android... mais pas d'aventures en "texte". Enfin c'est mon avis.

    Bon weekend à vous

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 939
    Points : 44 109
    Points
    44 109
    Par défaut
    Bonjour,
    tu dois te sentir un peu seul sur cette partie du forum

    Le truc que tu essaies de faire est marrant et me rappelle ces livre que tu lis en sautant de page en page.

    Je te met tout de suite à l'aise en te disant que je ne connais pas AS3 donc tout le code qui va suivre sera du JavaScript mais je pense que tu sauras le convertir.
    J'ai néanmoins une proposition de structure pour arriver à tes fins qui se résume à une seule fonction de création de ton étape et pour le reste des données se retrouve dans un objet.

    Structure de cet objet :
    Code javascript : 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
    const action = {
      "etape_00": {
        "titre": "Cliquez pour prendre part à une aventure bien naze 8D",
        "action": [{
            "label": "Jouer",
            "goto": "etape_01"
          },
          {
            "label": "options",
            "goto": "option"
          },
          {
            "label": "quitter",
            "goto": "etape_end"
          }
        ]
      },
      "etape_01": {
      // la suite ...
    • "titre" :String = le texte que tu affiches ;
    • "action" :Array = un tableau d':Object, la définition de tes boutons à afficher en fait :
      • "label" :String = le texte affiché dans le bouton ;
      • "goto" :String = l'étiquette de l'objet action à réaliser sur le click.

    J'espère que c'est clair

    Voilà comment j'aurais appréhendé la fonction, unique, d'affichage, c'est toujours du JavaScript :
    Code javascript : 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
    /**
     * function unique de création d'étape
     * @param {string} ref - étiquette de l'objet action
     */
    function createEtape(ref) {
      const oDest = document.getElementById("frame");
      if (action[ref]) {
        // création des éléments
        const oHtml = [];
        // info where on est
        const oSpan = document.createElement("SPAN");
        oSpan.textContent = "(" + ref + ")";
        oHtml.push(oSpan);
        // création du titre
        const oTitre = document.createElement("P");
        oTitre.textContent = action[ref].titre;
        // stocke titre
        oHtml.push(oTitre);
        const actions = action[ref].action || [];
        // création des boutons
        actions.forEach((act) => {
          const oBtn = document.createElement("BUTTON");
          oBtn.textContent = act.label;
          // ajout événement click
          oBtn.addEventListener("click", () => {
            createEtape(act.goto);
          })
          // stocke bouton
          oHtml.push(oBtn);
        })
        // vide élément destination
        oDest.innerHTML = "";
        // ajout les éléments crées
        oDest.append(...oHtml);
      }
    }
    Il suffit d'appeler la fonction en passant l'étiquette de l'objet action que l'on veut afficher.
    Pour lancer le jeu il suffit d'écrire :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // lancement du jeu
    createEtape("etape_00");
    C'est tout, l'ajout d'étape se faisant simplement par ajout d'une nouvelle référence dans l'objet action.
    Voilà pour un principe que tu pourrais appliquer sans pour autant multiplier les fonctions.


    Exemple complet :
    Code html : 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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Jeu de piste textuel</title>
    <meta name="Author" content="NoSmoking">
    <meta name="DVP-discussion" content="d2100136">
    <meta name="description" content="Jeu de piste textuel construit à la volée.">
    <style>
    html, body {margin: 0;padding: 0;font: 1em/1.5 Verdana,sans-serif;}
    h1, h2, h3 {margin: .25em 0;color: #069;}
    time {float: right;margin: .5em;font-size: 0.9em;color: #888;}
    main {display: block;margin: auto;max-width: 60em;}
    section {position: relative;margin: 0 2em 1em;}
    span {
      color: #888;
      font-style: italic;
    }
    button {
      display: block;
      margin: .5em 1em;
      margin-left: 1em;
      min-width: 20em;
      font: inherit;
      cursor: pointer;
    }
    button:first-letter {
      text-transform: uppercase;
    }
    </style>
    </head>
    <body>
    <main>
      <header>
        <time datetime="2021-01-19">Jan. 2021</time>
        <h1>Jeu de piste textuel</h1>
      </header>
      <section>
        <div id="frame"></div>
      </section>
    </main>
    <script>
    "use strict";
    const action = {
      "etape_00": {
        "titre": "Cliquez pour prendre part à une aventure bien naze 8D",
        "action": [{
            "label": "Jouer",
            "goto": "etape_01"
          },
          {
            "label": "options",
            "goto": "option"
          },
          {
            "label": "quitter",
            "goto": "etape_end"
          }
        ]
      },
      "etape_01": {
        "titre": "vous vous retrouvez dans une piece avec une porte ouverte...",
        "action": [{
            "label": "vous partez",
            "goto": "etape_02"
          },
          {
            "label": "vous restez",
            "goto": "etape_03"
          }
        ]
      },
      "etape_02": {
        "titre": "vous etes parti et vous etes sur un chemin",
        "action": [{
            "label": "vous l'arpentez",
            "goto": "etape_04"
          },
          {
            "label": "vous revenez à l'intérieur",
            "goto": "etape_03"
          }
        ]
      },
      "etape_03": {
        "titre": "Vous etes dans la piece. Et il y a une table que vous n'aviez pas vue, avec un gateau dessus",
        "action": [{
            "label": "vous mangez le gateau",
            "goto": "etape_05"
          },
          {
            "label": "vous partez finalement",
            "goto": "etape_02"
          }
        ]
      },
      "etape_04": {
        "titre": "Vous arrivez dans une foret bizarre, et vous vous endormez contre un rocher. Fin.",
        "action": [{
          "label": "C'etait vachement court",
          "goto": "etape_end"
        }]
      },
      "etape_05": {
        "titre": "Vous mangez le gateau et mourrez de sommeil, c'etait un vallium-cake super blindé xD",
        "action": [{
          "label": "je trouve l'histoire debile",
          "goto": "etape_end"
        }]
      },
      "etape_end": {
        "titre": " Bin vi, bin vi 8) A bientot pour de palpitantes nouvelles aventures",
        "action": [{
          "label": "on y retourne",
          "goto": "etape_00"
        }]
      }
    };
    /**
     * function unique de création d'étape
     * @param {string} ref - étiquette de l'objet action
     */
    function createEtape(ref) {
      const oDest = document.getElementById("frame");
      if (action[ref]) {
        // création des éléments
        const oHtml = [];
        // info where on est
        const oSpan = document.createElement("SPAN");
        oSpan.textContent = "(" + ref + ")";
        oHtml.push(oSpan);
        // création du titre
        const oTitre = document.createElement("P");
        oTitre.textContent = action[ref].titre;
        // stocke titre
        oHtml.push(oTitre);
        const actions = action[ref].action || [];
        // création des boutons
        actions.forEach((act) => {
          const oBtn = document.createElement("BUTTON");
          oBtn.textContent = act.label;
          // ajout événement click
          oBtn.addEventListener("click", () => {
            createEtape(act.goto);
          })
          // stocke bouton
          oHtml.push(oBtn);
        })
        // vide élément destination
        oDest.innerHTML = "";
        // ajout les éléments crées
        oDest.append(...oHtml);
      }
    }
    // lancement du jeu
    createEtape("etape_00");
    </script>
    </body>
    </html>
    Bon courage pour la transcription !

Discussions similaires

  1. [Projet terminé] Le Gypaete Plumu, une aventure textuelle
    Par CodeurPlusPlus dans le forum Projets
    Réponses: 3
    Dernier message: 03/06/2017, 02h05
  2. Réponses: 0
    Dernier message: 30/09/2010, 16h29
  3. recuperation de la structure d'une base
    Par pascalT dans le forum 4D
    Réponses: 7
    Dernier message: 07/06/2006, 16h32
  4. [tables systèmes] extraction de la structure d'une base
    Par laffreuxthomas dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 23/03/2006, 14h24
  5. exporter la structure d'une base Sybase en ascii
    Par Jean-Cyp dans le forum Sybase
    Réponses: 5
    Dernier message: 05/11/2002, 17h15

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