Bonjour,
ceci est mon tout premier message sur le forum, j’ai découvert Inform7 grâce au tutoriel de farfadin sur le Site du Zéro.
J’ai donc tout naturellement voulu me lancer dans la création d’une fiction interactive. D’abord en bidouillant des choses dans des petits « projets » pas destinés à être aboutis. Mais maintenant que je me suis familiarisé un peu mieux avec le langage (avec l’aide extrêmement utile du Handbook de Jim Aikin) j’ai décidé de me lancer dans un projet sérieux et surtout codé proprement.
Aussi avant de commencer à rédiger l’aspect purement narratif de ma fiction j’ai décidé de poser les mécaniques du jeu et ses aspects techniques. J’ai déjà mis au point avec succès de nouveaux types (kind) d’objets ainsi que de nouvelles actions associées (en respectant la logique des Check, Carry out, Report). Bien entendu je suis confronté à des petits tracas que vous saurez j’espère éradiquer :mrgreen:
Le problème principal, dont j’ai parlé sur le site du zéro (farfadin m’a d’ailleurs répondu je l’en remercie mais ses solutions sont assez lourdes à gérer), concerne la création d’une porte spéciale. J’aimerais créer une porte qui soit présente dans une pièce tout au long du jeu mais qui puisse mener à différents endroits selon l’état de la partie. Qu’à un moment donné elle mène de la pièce A à rien, qu’au suivant elle mène de A à une pièce B, puis ensuite à C, puis de nouveau à A, etc. Cette porte particulière devrait bien entendu être visible dans les deux pièces qu’elle relie.
Farfadin a suggéré la création d’un sous type de background afin de rendre visible à plusieurs endroits un tel objet. Malgré mes efforts je ne suis parvenu à déplacer cette porte sans générer d’erreur.
Voici la définition du type.
A stargate is a kind of backdrop.
It has a room called the origine.
It has a room called the destination that varies.
(Non je ne fais pas de fiction autour de la série Stargate )
A chaque changement de destination d’une de ces portes je comptais faire un « move porte to the destination of porte » suivi d’une mise à jour de la position des décors mais inform me dit que je ne sais pas utiliser les décors correctement. Certes ce n’est certainement pas pour ce genre de choses qu’ils ont été incorporés au langage mais je vois difficilement comment faire.
Mes recherches ont été infructueuses pourtant je ne pense pas être le premier à être confronté à cela.
Mon second problème concerne la création d’un type levier. Voici mon code.
[code]A lever is a kind of thing. It is usually fixed in place. It can be pushed or pulled. It is usually pulled.
Instead of pushing when the noun is a lever :
if the noun is pushed begin ;
say « [The noun] est déjà enfoncé[if the noun is female]e[end if]. »;
stop the action;
otherwise ;
now the noun is pushed;
say « Vous enfoncez [the noun]. »;
end if.
Understand « enfoncer [something] » as pushing.
Instead of pulling when the noun is a lever :
if the noun is pulled begin ;
say « [The noun] est déjà tiré[if the noun is female]e[end if] vers vous. »;
stop the action;
otherwise ;
now the noun is pulled;
say « Vous tirez [the noun] vers vous. »;
end if.
[/code]
Cela fonctionne très bien mais ça ne me semble pas être très propre (utilisation abusive de instead).
Mais si je suis le schéma classique du check, carry out, report. Etant donné qu’un levier est fixé sur place, tirer ou pousser ne va même pas jusqu’au check mais est arrêté avant par le fait que pousser ou tirer, ça ne marche pas pour les objets fixes.
J’ai donc pensé à créer de nouvelles actions pushingL et pullingL, distinctes des pull et push, qui concernent uniquement les leviers. Avec donc des check, carry out, et report.
Et simplement faire des « Instead of pulling when the noun is a lever : try pullingL. ». Comme ça si j’ai des exceptions à faire sur des leviers particuliers je mettrai mes « instead » sur les « pullingL » et non pas sur les « pulling when the noun is a lever ».
Est-ce une solution convenable ? Y a-t-il plus propre ?
Enfin, troisième question. Comment gérer l’affichage de certaines propriétés entre parenthèses du style « boite à questions (ouvert) », « machine à laver (éteint) ». Comment donc pouvoir empêcher leur affichage ou à l’inverse instaurer mon propre affichage (par exemple pour peaufiner mon type levier en indiquant si un levier donné est tiré ou enfoncé).
Voilà. Je pense avoir fait le tour de mes interrogations actuelles (et oui il y en a d’autres auxquelles je ne pense pas à l’instant). En espérant que vous puissiez m’aider et que je puisse affirmer :
Now ma lanterne is lit.