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
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
Si tu veux automatiser ça, ça ressemblerait à un truc du genre :
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…
Et pour l’automatiser encore plus (je n’ai pas testé mais ça devrait fonctionner) :
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 :
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.
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.
Je vais prendre ça pour un compliment.
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]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] ».[/code]
Je rebondis sur cette partie de code :
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 :
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 :
Definition: the player is mort if pv of player <= 0.
Puis, plus tard :
...
if the player is mort , say « Game over !".
C’est bien ça ?
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.
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 :
Definition: a person is alive if its PV is 5 or more.
Et après on peut écrire des choses comme :
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 :
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.
Ok. Je vois.
Merci pour toutes ces explications ! ^^