Pages traduites Pages à traduire Pages en cours de traduction
A propos
 

Ceci est une ancienne révision du document !



L'analyseur de texte

Vous pouvez désormais utiliser un analyseur de texte dans vos jeux, comme le faisaient les plus anciens jeux Sierra. Dans l'éditeur, allez dans le panneau “Text parser” (Analyseur de texte). Là, vous verrez une courte liste de mots qui vous sont fournis. Chaque mot a un nombre à côté de lui.

Basiquement, vous ajoutez le mot que vous voulez utiliser par un clic droit sur la liste, et sélectionnez “Add word” (ajouter mot). Toutefois, le véritable intérêt de l'analyseur est sa capacité à reconnaître des synonymes - lorsque deux mots signifient la même chose. Par exemple, si vous voulez que le joueur tape “look at fence” (regarder la clôture), il pourrait taper à la place “look at wall” (regarder le mur), si c'est sa façon de voir le dessin. Où un anglais taperait ”colour” , un américain tapera peut-être ”color”, les deux devraient avoir le même effet.

Pour ajouter un synonyme à un mot existant, sélectionnez le mot. Faites un clic droit dessus et choisissez “Add synonym” (ajouter synonyme). Vous remarquerez que le nouveau mot donne le même nombre que l'ancien. Tous les mots avec le même nombre sont considérés comme identiques par l'analyseur.

Vous remarquerez que la liste fournie a beaucoup de mots avec le numéro 0. Il s'agit d'un numéro spécial, qui indique que l'analyseur doit ignorer complètement le mot. Dans notre exemple précédent, le joueur devait taper “look at the fence”, “look at fence”, ou juste “look fence”. En ajoutant des mot comme “at” et “the” dans la liste à ignorer, ils sont enlevés automatiquement des entrées tapées par l'utilisateur. Pour ajouter de nouveaux mots à ignorer, il suffit de les ajouter comme synonymes.

Comment utiliser l'analyseur de texte ? Eh bien vous aurez besoin d'une zone de saisie (Fonctions et propriétés des zones de saisie de GUI (Text Box)) dans un GUI quelque part pour permettre au joueur d'entrer du texte, ou vous pouvez simplement utiliser la commande InputBox (mais elle présente une longueur de ligne assez restreinte).

Lorsque l'utilisateur a entré son texte (vous le détecterez certainement par le déclenchement de l'événement associé à la TextBox), appelez la fonction Parser.ParseText pour dire à AGS quelle chaîne de texte utiliser dans les commandes suivantes. Vous pourrez ensuite simplement utiliser la commande Said pour tester ce que le joueur a entré.

Tapez la phrase entière (SANS mettre les mots ignorés), et AGS la comparera à ce que l'utilisateur a entré, en considérant tous les synonymes comme équivalents. Par exemple (en supposant que notre TextBox est appelée “txtUserInput”) :

  String input = txtUserInput.Text;
  Parser.ParseText(input);
  if (Parser.Said("regarder barrière")) {
    Display("C'est une vieille barrière en bois.");
  }
  if (Parser.Said("manger pomme")) {
    Display("Vous adoreriez, mais vous n'en avez pas.");
  }

Il y a deux mots spéciaux que vous pouvez utiliser avec la commande Said. “anyword” (n'importe quel mot) correspondra à n'importe quel mot que l'utilisateur entrera. Par exemple, Said(“jeter anyword”) fera correspondre “jeter dague”, ou “jeter ordure”. “rol” (raccourci pour Rest-of-Line – Reste-de-la-Ligne) fera correspondre au reste de ce que l'utilisateur a entré. Ainsi, vous pourrez faire :

if (Parser.Said("tuer rol")) {
  Display("Vous n'êtes pas quelqu'un de violent.");
}

Ainsi, si le joueur essaie de tuer quoique ce soit, il obtiendra toujours la même réponse.

Parfois, vous désirerez peut-être accepter deux mots différents, qui ne sont pas synonymes, comme désignant la même chose. Par exemple, les mots “prendre” et “manger” ont habituellement des sens totalement différents, vous ne voudrez donc pas en faire des synonymes. Toutefois, si le joueur possède une pillule contre les maux de crâne, par exemple, alors “prendre la pillule” et “manger la pillule” pourraient être tous les deux valides. C'est ici que la virgule ”,” devient pertinente : si vous incluez une virgule dans le texte, tous les synonymes et les mots séparés par la virgule correspondront. Ainsi :

if (Parser.Said("manger,prendre pillule"))

correspondra à “manger” ou “prendre” et à tous leurs synonymes suivis de pillule ou d'un de ses synonymes.

Une autre tâche fréquente avec un analyseur est de vérifier des mots facultatifs - par exemple, s'il y a une un mur de briques à l'écran, vous voudrez que le joueur puisse entrer “regarder mur” et “regarder mur de briques”. Bien que cela puisse être réalisé par le test de deux commandes Said, AGS propose une façon plus simple. Vous pouvez utiliser les [crochets] pour signifier un mot optionnel. Ainsi :

if (Parser.Said("regarder mur [de brique]"))

correspondra à “regarder mur” et “regarder mur de brique”.

Tout ça est très bien, mais les objets avec lesquels vous interagissez dépendent de la pièce où vous vous trouvez - par exemple, dans une pièce il peut y avoir un arbre auquel le joueur devrait pouvoir faire référence avec “regarder arbre”, ou autre. Définir tout cela dans votre script global serait très contraignant et peu lisible. Utilisez alors la fonction CallRoomScript. Ainsi, vous pouvez faire comme suit :

  Parser.ParseText(input);
  String badWord = Parser.SaidUnknownWord();
  if (badWord != null)
    Display("Vous ne pouvez pas utiliser '%s' dans ce jeu.", badWord);
  else if (Parser.Said("manger pomme")) {
    Display("Vous adoreriez, mais vous n'en avez pas.");
  }
  ... // autres commandes du jeu
  else
    CallRoomScript (1);

Alors, le script de la pièce peut voir ce que le joueur peut faire dans la pièce actuelle. Voir la description de CallRoomScript pour plus d'information.

 
l_analyseur_de_texte.1350034205.txt.gz · Dernière modification: 12/10/2012 11:30 par kitai
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki