Comment afficher les sorties possibles

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

Modérateurs: Stormi, Otto Grimwald

Comment afficher les sorties possibles

Messagepar swiart2 le Jeu Fév 01, 2018 12:16 am

Bonjour

Sous inform 7, comment faire pour que pour chaque lieu toutes les sorties possibles soient affichees ?
Du style, les sorties sont l lest et au nord

C est un jeu a l 'ancienne que je re-programme.

Merci
Blog : http://www.inkypinky.blog/
Mes jeux en téléchargement, des articles sur le FI et l'écriture
swiart2
Celui qui attend à l'affût
 
Messages: 133
Inscription: Ven Juil 02, 2010 10:06 pm
Localisation: Rennes

Re: Comment afficher les sorties possibles

Messagepar StephaneF le Jeu Fév 01, 2018 10:55 am

Si tu veux automatiser ça, ça ressemblerait à un truc du genre :

Code: Tout sélectionner
After printing the locale description :
if there is a room (called R) which is mapped north of the location of the player, say "Au nord, [the printed name of R]." ;
if there is a room (called R1) which is mapped east of the location of the player, say "À l[']est, [the printed name of R1]." ;


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

Re: Comment afficher les sorties possibles

Messagepar Natrium le Jeu Fév 01, 2018 9:31 pm

Et pour l'automatiser encore plus (je n'ai pas testé mais ça devrait fonctionner) :

Code: Tout sélectionner
After looking:
    repeat with D running through directions:
        let R be the room D from the location;
        if R is a room: [c'est-à-dire n'est pas rien.]
            say "[The R] est [au D]".

J'ai préféré utiliser une règle after plutôt que l'activité printing the locale description pour ne pas entrer inutilement dans les rouages internes d'Inform. Je pense que c'est mieux.

Si tu veux juste lister les directions possibles sans dire les endroits :

Code: Tout sélectionner
After looking:
    let L be a list of directions;
    repeat with D running through directions:
        let R be the room D from the location;
        if R is a room, add D to L;
    if the number of entries in L is 0:
        say "Il n'y a pas de d'issues.";
    else:
        say "Les sorties sont [the L]"


Pour lister les directions dans un ordre précis (par exemple pour avoir le nord toujours en premier), il faudra ordonner la liste.
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1164
Inscription: Mar Oct 04, 2011 11:18 pm

Re: Comment afficher les sorties possibles

Messagepar StephaneF le Jeu Fév 01, 2018 11:40 pm

J'ai enfin compris ma place dans l'univers : produire des réponses correctes, MAIS pour permettre à Natrium - qui semble en quelque sorte invoqué par mes propres écrits, comme un génie qui sortirait de sa bouteille, ou une horreur cosmique de son plan lovecraftien à 50 dimensions - de venir les compléter par des réponses que Graham Nelson pourrait écrire lui-même.
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 545
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: Comment afficher les sorties possibles

Messagepar Natrium le Sam Fév 03, 2018 2:52 am

Je vais prendre ça pour un compliment. :)
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1164
Inscription: Mar Oct 04, 2011 11:18 pm

Re: Comment afficher les sorties possibles

Messagepar Natrium le Sam Fév 03, 2018 9:16 pm

Tiens, quand j'y pense, il y a une façon encore plus belle. (Pas testé non plus, mais il n'y a pas de raisons que ça ne fonctionne pas.)

Code: Tout sélectionner
Definition: a direction (called thataway) is viable if the room thataway from the location is a room.

[Maintenant, on pourra dire qu'une direction est « viable » si elle mène quelque part depuis l'endroit actuel.]

After looking:
    if the number of viable directions is 0:
        say "Il n'y a pas de d'issues.";
    else:
        say "Les sorties sont [the list of viable directions]".
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1164
Inscription: Mar Oct 04, 2011 11:18 pm

Re: Comment afficher les sorties possibles

Messagepar Corax le Jeu Fév 08, 2018 11:05 am

Je rebondis sur cette partie de code :

Code: Tout sélectionner
Definition: a direction (called thataway) is viable if the room thataway from the location is a room.


Ça a l’air très pratique les définitions. La syntaxe doit-elle bien se comprendre comme ça :

Code: Tout sélectionner
Definition: (formule) if (condition).


À chaque fois qu’Inform croise la formule, il teste la condition associée. On pourrait donc faire un truc du genre :

Code: Tout sélectionner
Definition: the player is mort if pv of player <= 0.


Puis, plus tard :

Code: Tout sélectionner
   ...
   if the player is mort , say « Game over !".


C'est bien ça ?
Corax
Grand Ancien
 
Messages: 282
Inscription: Mer Juin 08, 2016 10:00 am

Re: Comment afficher les sorties possibles

Messagepar Natrium le Jeu Fév 08, 2018 10:49 pm

C'est exactement ça dans le principe, mais ton exemple ne fonctionnera pas (je pense).

Il faut quelque chose de suffisamment précis dans le définition, c'est-à-dire le nom d'un type ou un objet particulier. Cependant, « player » n'est pas un objet, c'est une variable pointant vers un objet-personne représentant le joueur. Tu peux remplacer par « person » et vérifier dans la condition si cette personne est bien le joueur (et renvoyer faux sinon). Tu peux aussi, s'il n'y a qu'un seul personnage-joueur possible, l'utiliser directement. Si tu n'as pas déclaré de joueur explicitement, alors l'objet par défaut représentant le joueur s'appelle « yourself ».

Aussi, tu ne peux pas utiliser le mot « mort » car ça entrerait en conflit avec l'adjectif « mort » créé par l'extension française et utilisé dans les réponses. Peut-être que les prochaines versions d'Inform pourront corriger cela, mais il faudra utiliser autre chose en attendant (j'ai utilisé « occis » dans un de mes projets).

On peut aussi spécifier un contraire.

Code: Tout sélectionner
Definition: yourself is alive rather than dead if its PV <= 0.

Il y a aussi moyen de faire des choses encore plus puissantes comme des comparatifs :

Code: Tout sélectionner
Definition: a person is alive if its PV is 5 or more.

Et après on peut écrire des choses comme :

Code: Tout sélectionner
    if the player is aliver than le gobelin: [Il a plus de PV.]

On peut aussi avoir des conditions plus compliquées avec une syntaxe légèrement différente :

Code: Tout sélectionner
Definition: a person is dead:
    if condition 1:
        yes;
    else if condition 2:
       no;

Et ainsi de suite.

Enfin, il ne faut pas utiliser adjectifs ayant été définis comme propriété (qu'on change à la main, pas qu'on teste), sinon ça peut causer des bugs.

Plus de précision dans les sections 6.4 à 6.8.
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1164
Inscription: Mar Oct 04, 2011 11:18 pm

Re: Comment afficher les sorties possibles

Messagepar Corax le Ven Fév 09, 2018 8:46 am

Ok. Je vois.
Merci pour toutes ces explications ! ^^
Corax
Grand Ancien
 
Messages: 282
Inscription: Mer Juin 08, 2016 10:00 am


Retourner vers Questions techniques et aide pour votre code

Qui est en ligne

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

cron