Inform 7 : une comparaison qui ne marche pas

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

Modérateurs: Stormi, Otto Grimwald

Inform 7 : une comparaison qui ne marche pas

Messagepar tvisarl le Jeu Aoû 18, 2016 3:14 pm

Bonjour,

C'est de ma faute, bien sûr, mais où ? Voilà : je ne veux pas que le tapis du salon puisse être poussé deux fois, alors j'ai pondu ça :

Code: Tout sélectionner
Le tapis is a thing.
Le tapis is in Salon.
Le tapis has a number called the carpetPushed.
The carpetPushed is 0.

-----------

Instead of pushing tapis:
   if the carpetPushed is 0
      begin;
         say "Une trappe apparaît. Elle était dissimulée sous le tapis !";
         now carpetPushed is 1;
      otherwise;
         say "Cela ne sert à rien.";
      end if.


carpetPushed est un identifieur unique.
A l'exécution Inform ne signale aucune erreur de syntaxe mais se comporte toujours comme si carpetPushed n'était pas à zéro. Et pourtant j'ai vérifié avec un showme avant et après ???

Merci,
Thierry
tvisarl
Grand Ancien
 
Messages: 166
Inscription: Sam Juin 18, 2016 9:20 am

Re: Inform 7 : une comparaison qui ne marche pas

Messagepar Natrium le Jeu Aoû 18, 2016 4:22 pm

Je trouve ça étrange que ça compile. Je pense que c'est un bug de cette version d'Inform. En fait, ton erreur est qu'il faut toujours bien indiquer à quel objet appartient le nombre.
Code: Tout sélectionner
if carpetpushed of le tapis est 0:

En d'autres mots, ce qu'il faut, c'est « tapis.carpetpushed », pas juste « carpetpushed ». D'ailleurs, si on ajoute dans ton code, juste avant la condition :
Code: Tout sélectionner
showme carpetpushed;
showme carpetpushed of tapis;
ça montre un truc bizarre pour le second, ce qui n'est pas normal.

Ceci étant, comme ce nombre ne peut avoir que deux valeurs, il vaut mieux utiliser une propriété « either/or » (faut que je trouve une traduction pour ça…) :
Code: Tout sélectionner
Le tapis can be pushed. Le tapis is not pushed.

Instead of pushing tapis:
    if le tapis is not pushed:
        say "Une trappe apparaît. Elle était dissimulée sous le tapis !";
        now le tapis is pushed;
    otherwise:
        say "Cela ne sert à rien.".

Au passage, la syntaxe que tu utilises pour les conditions est considérée comme  « vieille ». Le manuel d'Inform recommande celle que j'ai utilisée (pas de « begin » et « end », deux-points après « if » et « otherwise » et indentation à la python ; il faut que ce soit des tabulations, et pas des espaces comme sur le forum). Bien sûr, tu peux quand même continuer de faire comme tu le fais, ça ne change rien.
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1165
Inscription: Mar Oct 04, 2011 11:18 pm

Re: Inform 7 : une comparaison qui ne marche pas

Messagepar tvisarl le Jeu Aoû 18, 2016 5:09 pm

Décidément ton aide est précieuse. Merci encore,
Thierry
P.S : On traduit habituellement "either/or" par "ou/ou".
tvisarl
Grand Ancien
 
Messages: 166
Inscription: Sam Juin 18, 2016 9:20 am

Re: Inform 7 : une comparaison qui ne marche pas

Messagepar Natrium le Jeu Aoû 18, 2016 7:36 pm

Il n'y a pas de quoi.

tvisarl a écrit:P.S : On traduit habituellement "either/or" par "ou/ou".
Mais des « propriétés ou/ou », ce n'est pas très élégant. :wink: On pourrait très bien garder en anglais, mais comme à long terme la traduction de la documentation d'I7 est prévue, je réfléchis aux traductions des termes techniques. Ce n'est vraiment pas urgent pour l'instant.
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1165
Inscription: Mar Oct 04, 2011 11:18 pm


Retourner vers Questions techniques et aide pour votre code

Qui est en ligne

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