Besoin d’un petit coup de main sur inform 7

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

Modérateurs: Stormi, Otto Grimwald

Besoin d’un petit coup de main sur inform 7

Messagepar Corax le Mer Juin 08, 2016 10:58 am

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 :
Code: Tout sélectionner
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 !
Corax
Grand Ancien
 
Messages: 282
Inscription: Mer Juin 08, 2016 10:00 am

Re: Besoin d’un petit coup de main sur inform 7

Messagepar StephaneF le Mer Juin 08, 2016 12:36 pm

Je vois un truc genre :

Code: Tout sélectionner
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.
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 545
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: Besoin d’un petit coup de main sur inform 7

Messagepar Corax le Mer Juin 08, 2016 1:12 pm

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.)
Corax
Grand Ancien
 
Messages: 282
Inscription: Mer Juin 08, 2016 10:00 am

Re: Besoin d’un petit coup de main sur inform 7

Messagepar StephaneF le Mer Juin 08, 2016 1:29 pm

Tu as skype ? ça sera peut être plus facile en direct (par écrit)
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 545
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: Besoin d’un petit coup de main sur inform 7

Messagepar Corax le Mer Juin 08, 2016 3:26 pm

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.
Corax
Grand Ancien
 
Messages: 282
Inscription: Mer Juin 08, 2016 10:00 am

Re: Besoin d’un petit coup de main sur inform 7

Messagepar Natrium le Mer Juin 08, 2016 3:32 pm

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 :
Code: Tout sélectionner
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 :
Code: Tout sélectionner
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 :
Code: Tout sélectionner
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 :
Code: Tout sélectionner
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. :()

(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é.
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1164
Inscription: Mar Oct 04, 2011 11:18 pm

Re: Besoin d’un petit coup de main sur inform 7

Messagepar Corax le Mer Juin 08, 2016 5:00 pm

@ Azathoth :

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

@ 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é !
Corax
Grand Ancien
 
Messages: 282
Inscription: Mer Juin 08, 2016 10:00 am

Re: Besoin d’un petit coup de main sur inform 7

Messagepar Natrium le Mer Juin 08, 2016 5:40 pm

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. :)) 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.
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1164
Inscription: Mar Oct 04, 2011 11:18 pm

Re: Besoin d’un petit coup de main sur inform 7

Messagepar Corax le Mer Juin 08, 2016 5:54 pm

Ok. :)
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 !
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: Bing [Bot] et 1 invité

cron