[Inform 7] Chose intouchable et choix multiples

Pour discuter des langages que nous utilisons pour réaliser nos jeux : problèmes, solutions, suggestions...

Modérateurs: Stormi, Otto Grimwald

[Inform 7] Chose intouchable et choix multiples

Messagepar Corax le Mer Juil 13, 2016 10:21 am

Salut à tous !

Me revoilà pour deux petites questions toutes bêtes.

Je sais que lorsqu’on déclare une nouvelle action, on peut préciser qu’elle nécessite par exemple un objet visible ou un objet touchable. Mais comment faut-il faire pour déclarer qu’un objet donné est juste visible, pas touchable ? Je demande ça dans le cadre de backdrop tel qu’un ciel ou un plafond, espérant ainsi empêcher les actions searching et touching qui, je présume, nécessite un objet touchable. Sinon, je peux toujours coder mes propres adjectifs, mais ce serait bête si c’est déjà prévu de base dans le système.

Seconde interrogation. Je sais qu’on peut poser au joueur des questions fermées. Je me sers du système. Mais comment s’y prend-on pour le faire choisir entre plusieurs propositions, genre faire ci, faire ça ou faire ceci ?
Je n’en ai pas spécialement besoin à l’instant T, mais c’est toujours utile d’ajouter des cordes à son arc.

Je vous remercie d’avance pour vous réponses ! :)
Corax
Grand Ancien
 
Messages: 282
Inscription: Mer Juin 08, 2016 10:00 am

Re: [Inform 7] Chose intouchable et choix multiples

Messagepar StephaneF le Mer Juil 13, 2016 10:59 am

Code: Tout sélectionner
Seconde interrogation. Je sais qu’on peut poser au joueur des questions fermées. Je me sers du système. Mais comment s’y prend-on pour le faire choisir entre plusieurs propositions, genre faire ci, faire ça ou faire ceci ?


Tu peux procéder par un menu chiffré ou par mots-clés, selon tes besoins...

Exemple 1

Code: Tout sélectionner
ChoixZombies is a truth state that varies. ChoixZombies is false.

Instead of opening the DoorOfTheDead :
say "Un groupe de zombies affreux sort du caveau." ;
say "1. Vous fuyez." ;
say "2. Vous restez pour combattre." ;
say "3. Vous vous roulez en boule par terre et attendez la mort en gémissant." ;
now ChoixZombies is true.

NumberEntering is an action applying to one number. Understand "[number]" as NumberEntering.

Instead of NumberEntering when ChoixZombies is true :
if the number understood is 1
begin ;
say "Vous fuyez." ;
otherwise if the number understood is 2 ;
say "Vous combattez." ;
otherwise if the number understood is 3 ;
say "Vous mourez." ;
otherwise ;
say "Entrez un chiffre entre 1 et 3." ;
end if.


Exemple 2 :

Code: Tout sélectionner
ChoixZombies is a truth state that varies. ChoixZombies is false.

Instead of opening the DoorOfTheDead :
say "Un groupe de zombies affreux sort du caveau." ;
say "- Vous FUYEZ." ;
say "- Vous RESTEZ pour combattre." ;
say "- Vous vous ROULEZ en boule par terre et attendez la mort en gémissant." ;
now ChoixZombies is true.

TextEntering is an action applying to one topic. Understand "[text]" as TextEntering .

Instead of TextEntering when ChoixZombies is true :
if the player's command includes "fuyez"
begin ;
say "Vous fuyez."  ; now ChoixZombies is false ;
otherwise if the player's command includes "restez" ;
say "Vous combattez." ; now ChoixZombies is false ;
otherwise if the player's command includes "roulez" ;
say "Vous mourez." ;  now ChoixZombies is false ;
otherwise ;
say "Entrez un des mots-clés indiqués." ;
end if.


à noter que si tu prends comme mot-clé un verbe à l'infinitif, tu dois d'abord le supprimer comme synonyme d'une action, par exemple si le choix est "Vous restez pour COMBATTRE", tu devras aussi faire :

Understand "combattre" as something new.

Sauf si éventuellement tu fais :

Code: Tout sélectionner
Instead of attacking when ChoixZombies is true :
say "Vous attaquez" ; now ChoixZombies is false.
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 545
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: [Inform 7] Chose intouchable et choix multiples

Messagepar Corax le Mer Juil 13, 2016 5:21 pm

Merci pour les exemples. C’est instructif. :)
Mais, il n’y a pas moyen de gérer ça par une méthode moins bricolée ? Je demande ça car pour gérer les questions fermées, il y a une instruction sur mesure :

Code: Tout sélectionner
Instead examining la monstrueuse peluche de combat rose:
  say "Voulez-vous attaquer ce monstre horrible ?" ;
  if player consents :
    end the story saying "Ho mon dieu, c’est trop horrible, vous êtes mort, mort et re mort !".
Corax
Grand Ancien
 
Messages: 282
Inscription: Mer Juin 08, 2016 10:00 am

Re: [Inform 7] Chose intouchable et choix multiples

Messagepar StephaneF le Mer Juil 13, 2016 6:04 pm

Pour les méthodes non-bricolées, faut demander à Natrium :p
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 545
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: [Inform 7] Chose intouchable et choix multiples

Messagepar Natrium le Mer Juil 13, 2016 10:27 pm

Azathoth a écrit:Pour les méthodes non-bricolées, faut demander à Natrium :p
Que vois-je ? Un compliment ? :) Mais bref, commençons par la première question.

Pour les choses non touchables :
Réponse courte : on ne peut pas.
Réponse longue : il faut bidouiller les règles d'accessibilité. L'exemple 216 montre comment faire (section 12.18). Sinon, il y a une extension qui implante ça de façon plus poussée, Far Away par Jon Ingold. Par contre il faut faire attention, car ça peut créer des problèmes si on teste la visibilité manuellement dans le code (« if le blabla est touchable »). Mais je pense que l'extension s'occupe de ça, donc il ne devrait pas y avoir de problèmes. Ce genre de chose aurait du être intégré à Inform, mais bon…

Pour les menus :
Ce sera toujours un peu bricolé, car Inform n'est pas vraiment fait pour ça, mais on peut faire mieux qu'une action. Si c'est vraiment ponctuel, et que ce n'est pas tout le jeu, il vaut mieux utiliser la règle « after reading a command ». Cette règle se déclenche après que le joueur a entré sa commande, mais avant qu'elle ne soit analysée.

J'ai fait un exemple vite fait, à titre « éducatif », mais ça doit être possible de faire mieux (et j'ai peut-être oublié des cas). Par exemple, il faut forcément attendre la fin du tour pour que le joueur fasse son choix, donc les règles qui se déroulent à chaque tour vont se lancer, ce qui n'est pas souhaitable. J'ai utilisé des tableau pour que ce soit modulable facilement, mais on peut aussi faire les vérifications au cas par cas à la place, s'il n'y a qu'un seul menu dans tout le jeu.
Code: Tout sélectionner
Table of Choix 1
Topic   Option   Réponse
"bonjour/salut"   "Dire BONJOUR."   "Bonjour, le joueur[_]!"
"au revoir" or "adieu"   "Dire AU REVOIR."   "Ce n'est pas gentil."

Le menu actuel est un nom de tableau qui varie.
menu en cours est initialement faux.

To montrer (T - un nom de tableau):
   maintenant menu en cours est vrai;
   maintenant le menu actuel est T;
   let N be 0;
   parcourir T:
      incrémenter N;
      dire "[N]. [entrée Option][à la ligne]".

After reading a command while menu en cours est vrai:
   [Si le joueur a entré un nombre.]
   si la player's command correspond à "[number]":
      let N be the number understood;
      si N > nombre de lignes du menu actuel or N <= 0:
         dire "Veuillez entrer un nombre entre 1 et [nombre de lignes du menu actuel].";
         rejeter la commande du joueur;
      choisir la ligne N du menu actuel;
      dire "[entrée Réponse][à la ligne]";
      maintenant menu en cours est faux;
      rejeter la commande du joueur;
   [Sinon si le joueur a entré du texte.]
   sinon:
      parcourir le menu actuel:
         si la player's command correspond à l' entrée Topic:
            dire "[entrée Réponse][à la ligne]";
            maintenant menu en cours est faux;
            rejeter la commande du joueur;
   dire "Veuillez faire un choix parmi les options présentées.";
   rejeter la commande du joueur.

Instead of jumping:
   montrer table of Choix 1.

Je n'ai pas trop commenté, j'espère que ce sera assez clair. La colonne « Réponse » dans le tableau peut être remplacée par une colonne de règles pour exécuter des instructions plutôt que de juste afficher un texte. Pour plus d'infos sur ce genre de tableau avec des topics, voir la section 16.13.

Sinon, pour ne pas avoir à attendre la fin du tour (sans plonger dans I6), on peut facilement assigner chaque choix à une touche du clavier, et afficher le résultat quand cette touche est appuyée. J'ai fait ça dans le Chant des dunes (voir « Part 2 - Affichage du menu principal » du fichier mis en lien), gros projet que j'ai à peine commencé (il faut vraiment que je m'y remette). Il faudra adapter un peu par contre (si cette solution t'intéresse, je peux toujours la montrer dans un cas plus général). Ou alors il doit y avoir des extensions qui permette de faire comme mon exemple, mais quand on veut dans le code et pas à la fin du tour, mais je n'ai pas cherché.
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1164
Inscription: Mar Oct 04, 2011 11:18 pm

Re: [Inform 7] Chose intouchable et choix multiples

Messagepar StephaneF le Mer Juil 13, 2016 10:38 pm

Ouais, tout de suite ça fait plus pro :(
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 545
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: [Inform 7] Chose intouchable et choix multiples

Messagepar Corax le Jeu Juil 14, 2016 8:24 am

Merci Natrium. Je comprends les exemples. Après, si je veux me lancer là-dedans, va falloir que j’expérimente à fond les tableaux. Ce ne sera probablement pas pour tout de suite. Mon projet actuel n’est pas un pur donjon crowler, les méthodes que j’ai mis en place me semble suffire. Vous pourrez peut-être sous peu en juger. J’ai quasiment achevé le prototype.

En revanche, maintenant que j’ai une idée assez précise de ce que permet de faire Inform, je ne peux m’empêcher de songer à ce que pourrait être un pur donjon crowler, ou un authentique RPG. J’accorde beaucoup d’importance à l’accessibilité d’un jeu. Aussi est-il indispensable de faciliter au maximum la tâche du joueur. Les menus à choix multiple semblent être un outil efficace.

Je suis également un grand adepte de l’uniformisation. Dès qu’on s’engage dans quelque chose de volumineux, je trouve préférable de mettre un place un système global qui facilite par la suite l’intégration des éléments de jeux plutôt que de se reposer sur une montagne d’exceptions.

@ Azathoth :
Les méthodes bricolées fonctionnent très bien aussi. Et Inform étant particulièrement souple, il se prête particulièrement bien au bricolage, enfin je trouve. ^^
Corax
Grand Ancien
 
Messages: 282
Inscription: Mer Juin 08, 2016 10:00 am

Re: [Inform 7] Chose intouchable et choix multiples

Messagepar Natrium le Ven Juil 15, 2016 4:54 pm

Je te conseille vraiment d'expérimenter les tableaux. C'est vraiment utilise pour faire du code propre et modulable, et on peut vraiment faire plein de choses avec (comme créer des objets ou des types d'objet avec des tableaux).

Corax a écrit:je ne peux m’empêcher de songer à ce que pourrait être un pur donjon crowler, ou un authentique RPG.
Il faut vraiment que tu joues à Kerkerkruip alors. (au passage, c'est « crawler » avec un « a »).
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1164
Inscription: Mar Oct 04, 2011 11:18 pm

Re: [Inform 7] Chose intouchable et choix multiples

Messagepar StephaneF le Ven Juil 15, 2016 5:31 pm

et on peut vraiment faire plein de choses avec (comme créer des objets ou des types d'objet avec des tableaux)


hummmm ?
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 545
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: [Inform 7] Chose intouchable et choix multiples

Messagepar Natrium le Ven Juil 15, 2016 6:08 pm

Code: Tout sélectionner
Le jardin est un endroit.
A fruit is a kind of thing. A fruit is usually edible.
Some fruits in le jardin are defined by the Table of fruits.

Table of fruits
fruit    description    goût
la pomme    "Un beau fruit rouge."    "acide"
la fraise    "Un petit fruit."    "sucré"
la framboise "Un fruit rose."    "délicieux"

After eating un fruit, dire "[Le noun] a un goût [goût du noun].".

Il n'y a donc pas besoin de taper à chaque fois « La pomme est un fruit. La description de la pomme est … ». On peut aussi créer des types d'objet (plutôt que des objets) comme ça.
Section 16 du chapitre « Tables ».
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1164
Inscription: Mar Oct 04, 2011 11:18 pm

Re: [Inform 7] Chose intouchable et choix multiples

Messagepar StephaneF le Ven Juil 15, 2016 6:17 pm

Promis, quand tu seras sur ton lit de mort, j'arriverai avec un bouquet de fleurs et le manuel d'Inform que j'aurai lu, en entier.
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 545
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: [Inform 7] Chose intouchable et choix multiples

Messagepar Corax le Dim Juil 17, 2016 4:13 pm

En effet, c'est pratique. :)
Corax
Grand Ancien
 
Messages: 282
Inscription: Mer Juin 08, 2016 10:00 am

Re: [Inform 7] Chose intouchable et choix multiples

Messagepar Natrium le Lun Juil 18, 2016 4:05 pm

Azathoth a écrit:Promis, quand tu seras sur ton lit de mort, j'arriverai avec un bouquet de fleurs et le manuel d'Inform que j'aurai lu, en entier.
Je pense que ce sera l'inverse. Quand tu seras sur ton lit de mort, je viendrai te lire le manuel en entier pour que tu puisse quitter ce monde en paix. :)
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1164
Inscription: Mar Oct 04, 2011 11:18 pm


Retourner vers Questions techniques et aide pour votre code

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron