Un ptit bug dans les biblis d'I6 ?

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

Modérateurs: Stormi, Otto Grimwald

Re: Un ptit bug dans les biblis d'I6 ?

Messagepar auraes le Mer Sep 17, 2014 11:26 am

Mule hollandaise a écrit:Merci d'avoir corrigé mon code, en effet j'ai (encore) oublié w = NextWord()....... (c'est la quatrième fois ^^')
Il y a encore un soucis sur ton site avec l'exemple sur parse_name : (http://www.hlabrande.fr/if/inform6trucs.html)
Code: Tout sélectionner
parse_name [ n w;
   w = NextWord();
   while(w) {
      if (w = 'nom' && action_to_be == ##Action && condition)
         n=n+10;
      else
         n++;
      w = NextWord();
   }
   return n;
],
Il n'y a aucune raison d’incrémenter n (n++) si aucune des conditions n'est satisfaite.
Il y a aussi une erreur : w == 'nom' pas w = 'nom'.

NextWord() pose d'autres problèmes : il parcourt l'intégralité de la phrase. Donc, si celle-ci est composée de plusieurs commandes séparées par THEN(1-3)__WD, le résultat de n peut-être erroné.
">examine la pomme puis mange la pomme." Ici, n pour 'pomme' vaut 2 au lieu de 1.
Il vaut mieux vérifier que NextWord() soit différent de THEN1__WD : While (w && w ~= THEN1__WD) ou mieux While (w && w ~= THEN1__WD or THEN2__WD or THEN3__WD)

Dans les bibliothèques (zcode & glulx) :
Code: Tout sélectionner
[ NextWord i j;
    if (wn > parse->1) { wn++; rfalse; }
    i = wn*2-1; wn++;
    j = parse-->i;
    if (j == ',//') j = comma_word;
    if (j == './/') j = THEN1__WD;
    return j;
];
Il manque éventuellement des paramètres pour : j == './/'
Code: Tout sélectionner
 if (j == './/' or THEN2__WD or THEN3__WD) j = THEN1__WD;


Il y a aussi une erreur dans tes Petits trucs bien utiles en Inform 6, concernant Life : il manque Order.
Avatar de l’utilisateur
auraes
Grand Ancien
 
Messages: 348
Inscription: Ven Avr 11, 2008 9:15 pm

Re: Un ptit bug dans les biblis d'I6 ?

Messagepar Mule hollandaise le Ven Sep 19, 2014 6:41 am

Oui, tu as raison, ça doit être "si c'est le bon mot, alors si c'est la bonne action donner un plus gros score" !
Et merci aussi pour Order, j'avais oublié !

Pour ce qui est de THEN, j'avoue que je ne sais pas ce qui se passe à ce moment-là : est-ce que le parser coupe en plusieurs commandes, mais seulement après que parse_name ait fait son oeuvre ?
Et si j'ai bien compris, le bug du NextWord(), une fois qu'il est résolu, plus besoin de THEN2__WD et THEN3__WD dans le test ?
Et si le but de mon code c'est juste de désambiguer, est-ce que c'est grave si je ne fais pas le test pour THEN1__WD ? Il me semble que même si je ne fais pas le test ça a quand même pour effet de désambiguer. Après, les scores seront peut-être "anormaux", mais je sais pas si ça a grande importance en terme de comportement du jeu... ?
Mule hollandaise
Grand Ancien
 
Messages: 1123
Inscription: Mar Aoû 29, 2006 10:57 pm

Re: Un ptit bug dans les biblis d'I6 ?

Messagepar auraes le Ven Sep 19, 2014 9:43 am

Mule hollandaise a écrit:est-ce que le parser coupe en plusieurs commandes
Non, j'avais vérifié : il parcourt bien l’intégralité de la phrase.
Mule hollandaise a écrit:Et si j'ai bien compris, le bug du NextWord(), une fois qu'il est résolu, plus besoin de THEN2__WD et THEN3__WD dans le test ?
Ce n'est pas un bogue, mais encore une bizarrerie... ça faciliterait effectivement la tâche.
Mule hollandaise a écrit:Après, les scores seront peut-être "anormaux", mais je sais pas si ça a grande importance en terme de comportement du jeu... ?
Pour l'instant, cela pose problème pour la 6/11 et la 6/12 :
http://www.intfiction.org/forum/viewtopic.php?f=7&t=15730&p=80638#p80637
S'il y a bogue et qu'il est corrigé, je ne vois pas pourquoi cela ne continuerait pas à poser des problèmes (si tu trouves dans la énième phrase, ce que tu cherches dans la première...)
Avatar de l’utilisateur
auraes
Grand Ancien
 
Messages: 348
Inscription: Ven Avr 11, 2008 9:15 pm

Précédente

Retourner vers Questions techniques et aide pour votre code

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

cron