Besoin d’un petit coup de main sur inform 7

Bonjour à tous !

Grâce à votre site, j’ai découvert la fiction interactive, et d’ailleurs je vous en remercie. Après avoir testé quelques jeux, je me suis depuis peu lancé dans la création d’un projet. Je développe celui-ci sur inform 7. Je me suis servi des tutoriaux (celui sur le site et celui sur le forum), je pioche également dans la documentation, ma connaissance du langage devient satisfaisante pour élaborer des choses un peu plus complexe qu’une fiction de base. Jusqu’à présent, je progressais sans réelle difficulté et voilà que je tombe sur un os. Je réalise en fait qu’une notion élémentaire m’échappe. Alors voilà, me voici devant vous, sollicitant vos lumières.

Le problème est le suivant :

Imaginons un endroit nommé Salle. J’aimerais faire en sorte que tous les objets déposés dans cette salle soit retirés du jeu lorsque le joueur s’en va.

Ce que j’arrive à faire, ce serait retirer un objet précis, un objet clairement identifié dans le code, mais je n’arrive pas à désigner « les objets présents dans la Salle ».

Le même problème se retrouve par exemple dans ce contexte :

Instead dropping a thing : Remove "la chose en question » from the game.
Comment écrire en inform 7 « la chose en question » ?

J’espère avoir posté cette demande au bon endroit. J’espère aussi que la question n’a pas été abordée juste à côté. J’ai toujours un peu peur de faire une bourde en débarquant dans un nouveau forum.

Quoi qu’il en soit, je vous remercie d’avance pour vos réponses !

Je vois un truc genre :

Before going north when the player is in Salle : repeat with T running through things in Salle begin ; if T is not a person, remove T from play ; end repeat.

Salut Azathoth !

Déjà, merci pour le code.
Peux-tu m’expliquer le concept auquel tu fais appel s’il te plait ? Mon but est bien sûr de le comprendre pour pouvoir l’adapter à toutes les situations.

Que permet de faire « repeat » exactement ?
Y a-t-il d’autre moyen de procéder, notamment dans le second contexte que j’expose, celui où je dois simplement parvenir à écrire « la chose en question » ?

Dès que je redéfinis une règle, il peut être utile de pouvoir récupérer l’élément concerné par celle-ci. (La chose qui doit être lâchée, la personne a attaquer, etc.)

Tu as skype ? ça sera peut être plus facile en direct (par écrit)

Ha non, navré, je n’ai pas skype. Ceci dit, si tu me donnes quelques petites explications avec deux trois exemples évocateurs, ça devrait me suffire.

J’ai déjà des notions en programmation orienté objet grâce à mes études. Et même si ça fait plusieurs années que je n’ai pas pratiqué, je devrais vite saisir la chose.

Bienvenue !

Je ne sais pas si la conversation Skype a eu lieu, mais j’écris quand même pour la postérité.

« Repeat » permet de parcourir tous les objets possédant une description donnée (il s’agit d’une boucle), et de faire des actions sur chacun d’eux, l’un après l’autre. On peut même améliorer le code d’Azathoth pour enlever la condition à l’intérieur de la boucle, en la mettant dans la description :

repeat with T running through things in salle which are not the player: now T is nowhere;
Et on peut faire aussi détaillé qu’on veut :

repeat with T running through open openable lockable containers which contain a lit thing: now T is closed; now T is locked;
Le « T » est juste le nom de l’objet en train d’être parcouru. On peut mettre ce que l’on veut, comme « cible » ou « qetugk » si tu veux. Aussi, la version d’Azathoth, avec « begin » et « end », est considérée comme vieille. Il est recommandé d’utiliser la version indentée avec des tabulations, comme pour les conditions (si tu copies du forum, fais attention, j’ai mis des espaces car le forum n’accepte pas les tabulations). Pour plus d’infos, section 11.10 de la doc.

Pour ce qui est de l’objet en cours, il s’agit tout simplement du « noun » (ou du « second noun » pour une action à deux objets).

Exemple : donner la pomme à la fillette : pomme est le noun et fillette, le second noun. Ton code devient :

Instead of dropping something: now the noun is nowhere.
Il existe une autre construction, pas nécessaire dans ton cas mais utile quand on parle d’un objet qui n’est pas lié à l’action :

Instead of dropping a thing when a person (called P) is in the location: say "[The P] vous regarde d'un air réprobateur.";
Encore une fois, le « P » est un nom choisi par toi. Pour plus d’infos, section 8.15 de la doc.

Et enfin, les questions que je pose toujours à ceux que viennent d’arriver :
Comment as-tu découvert les FI ? Et quand tu parles du tuto, parles-tu de celui qui permet de faire Sable, avec le code souce en français ? Si c’est le cas, peux-tu me dire ce que tu en a pensé ? (et finalement, utilises-tu la syntaxe en français ou anglais ? Ça a l’air d’être en anglais vu le code qui tu montres. :frowning:)

(ah et pas besoin d’avoir peur, au pire des cas un modérateur va juste déplacer le sujet dans la section appropriée. Essaie juste de donner un nom plus précis au sujet la prochaine fois, genre « faire référence à un objet précis », plutôt que « Eh j’ai besoin d’aide ! ».)

Et voilà, c’était un peu long, désolé.

@ Azathoth :

Plus besoin d’explication, j’ai tout compris ! :slight_smile:

@ Natrium :

Salut et merci pour ces explications détaillées. La chose me paraît limpide désormais. D’ailleurs j’ai eu le temps de tester et ça fonctionne très bien.

La fiction interactive, je connaissais plus ou moins depuis longtemps, mais je n’y avais jamais joué avant de tomber sur votre site. C’est donc bien votre communauté qui m’a fait découvrir ce sympathique loisir.

Il s’agit bien du tuto avec Sable. Je le trouve très bien fait. Grâce à lui, j’ai rapidement acquis les bases, ce qui m’a permis de voler plus ou moins de mes propres ailes. En revanche, je trouve un peu dommage que votre site ne soit pas à jour. En l’état, quelqu’un qui ne fait pas l’effort de venir sur le forum va télécharger une version d’inform incompatible avec l’extension française proposée. J’ai peur que ça rebute quelques personnes.

Au niveau de mon code, c’est du joli franglish. J’utilise quand c’est possible les éléments traduits, mais pas systématiquement. Par exemple, dans une partie riche en texte narratif, j’aurais tendance à mettre des « dire » et des « maintenant » alors que dans des parties plus techniques j’opte pour du « now » et du « say ». De plus, si j’ai un doute sur une fonction donnée, je vais avoir tendance à passer en anglais pour être sûr que l’erreur ne vient pas de l’extension expérimentale. Enfin, j’utilise la forme moderne avec indentation.

C’est à mon avis une très bonne chose de tenter de traduire l’intégralité de la source car Inform gagne vraiment à devenir le plus accessible possible. Il pourrait intéresser des gens peut habituer à coder.

Concernant le titre du sujet, puis-je le modifier par moi-même en éditant le premier de mes messages ?

Sinon voilà et merci encore pour l’aide ainsi que pour la réactivité !

Pas de problème ! Oui, je comprends pour ce qui est du français/anglais mélangé. Moi c’est un peu pareil (surtout que quand j’écris du code censé être utilisé par tout le monde, comme des extensions, je suis obligé de rester sur l’anglais ; du coup, je connais la syntaxe par cœur dans les deux langues. :slight_smile:) Les prochaines versions d’Inform devraient permettre de traduire de plus en plus de choses, l’auteur de ce système a fait de gros efforts de ce côté-là. Reste plus qu’à attendre.

Pour le site, on planifie de le mettre à jour, ça devrait arriver cette année, on espère.

Et pas la peine de changer le titre du sujet, il faudra juste y penser la prochaine fois que tu en écris un.

Ok. :slight_smile:
Et bien, je m’en retourne à mon projet. Si jamais je me retrouve face à un autre problème, je n’hésiterai pas à demander. Et puis, si j’aboutis à un résultat convenable, je ne manquerai pas de vous en faire profiter.

Bonne soirée à tous !