[I6] >acheter x sur y

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

Modérateurs: Stormi, Otto Grimwald

[I6] >acheter x sur y

Messagepar Mule hollandaise le Ven Aoû 16, 2013 3:13 pm

Bonjour à tous,

Je suis en train de corriger les bugs dans mon jeu "Homeland Security", et je suis tombé sur un problème qui me laisse perplexe, et qui demande peut-être une meilleure connaissance des bibliothèques que celle que j'ai :wink:

Voilà mon problème : mon héros doit acheter un billet d'avion sur Internet. Il est devant un ordinateur, et il n'y a pas d'objet qui réagit au terme "billet" puisqu'il n'en a pas encore acheté. Je voudrais que le joueur puisse "acheter billet", "acheter billet sur Internet" et "acheter billet sur ordinateur". Je me suis donc dit, plutôt que de coder les verbes salement, je vais essayer de faire joujou avec parse_name :

Code: Tout sélectionner
parse_name [ n w ;
w = NextWord();
if (action_to_be == ##Buy) {   ! Reconnaître "acheter billet" sans hardcoder le verbe
 if (w == 'billet') {
  w = NextWord();
  if (w) {
   if (w=='sur') {w = NextWord();}       ! "acheter billet sur..."
   if (w=='Internet' or 'internet') {return 2;}   ! "acheter billet sur Internet"
   while (w) {
    if (w == 'ordinateur' or 'ordi' or 'pc' or 'ecran' or 'libre' or 'service' or 'libre-service') {n=n+2;}
    w = NextWord();
    }
   return n;
  }
  else { return 2; }  ! "acheter billet"
 }
}
while (w) {
 if (w == 'ordinateur' or 'ordi' or 'pc' or 'ecran' or 'libre' or 'service' or 'libre-service') {n++;}
 w = NextWord();
}
return n;
],
....
before [; Buy: if (parse-->3 == 'billet') {<<Internet>>;} ],


Dans ce deuxième cas, voilà les réponses que j'obtiens :
Code: Tout sélectionner
>acheter billet
Vous achetez le billet.
>acheter ordinateur
L'ordinateur n'est pas à vendre
(Jusque là, ça va !)

>acheter billet internet
Vous achetez le billet.
>acheter billet sur internet
Merci de reformuler: je n'ai compris que : acheter l'ordinateur

>acheter billet ordinateur
Vous achetez le billet.
>acheter billet sur ordinateur
Merci de reformuler: je n'ai compris que : acheter l'ordinateur


J'ai remarqué que "acheter x sur y" donnait un "merci de reformuler", et ici j'ai l'impression que ce message apparaît presque par défaut (sans même consulter le parse_name, d'après mes tests) : est-ce que la bibliothèque refuse automatiquement toute commande de type ">acheter x sur y", ou est-ce que je m'y prends mal ? Si c'est la bibliothèque, y'a-t'il moyen de la changer tout en préservant la cohérence (par exemple, si y est un supporter ou container et que x est dans y, renvoyer "acheter x") ou est-ce trop compliqué ? (ça doit être trop compliqué, vu qu'il faudrait dans ce cas revoir toutes les structures >action x sur y où y supporte x...)

Merci de votre aide !



PS: l'autre solution serait de bidouiller avec les verbes :
Code: Tout sélectionner
Extend 'acheter'
 * 'billet'                          -> AchatBillet;
 * 'billet' 'sur' 'Internet'      -> AchatBillet;
 * 'billet' 'sur' noun            -> AchatBilletOrdi

[ AchatBilletSub ;
 if (location == salledel'ordi) {<<AchatBillet;>>} else {"Vous ne voyez rien de tel, à moins que...";}
];

[ AchatBilletOrdi ;
 if (noun == ordinateur) {<<AchatBillet>>;} else {"Vous ne pouvez pas acheter de billet sur" (the) noun;}
 // Ou quelque chose comme ça
];
   

J'ai pas essayé, mais ça devrait marcher ; c'est assez moche tout de même, mais si ça résout le problème on va pas chipoter.
Mule hollandaise
Grand Ancien
 
Messages: 1124
Inscription: Mar Aoû 29, 2006 10:57 pm

Re: [I6] >acheter x sur y

Messagepar Otto Grimwald le Ven Aoû 16, 2013 9:37 pm

à mon avis pour ce genre de truc rapide et spécifique à un jeu, le mieux serait d'utiliser les verbes qui sont prévus pour cela.

Avatar de l’utilisateur
Otto Grimwald
Très Ancien
 
Messages: 3028
Inscription: Mar Aoû 24, 2004 12:02 pm

Re: [I6] >acheter x sur y

Messagepar Mule hollandaise le Ven Aoû 16, 2013 11:13 pm

En y réfléchissant au calme, je pense que tu as raison : le fait que "> action x sur y" ne soit pas reconnu de manière assez globale (ie pour aucune action que j'ai essayée) me pousse à dire que ce n'est pas un bug, c'est une feature. (Ca doit sans doute mener à des cas particuliers problématiques, tout ça... Ou simplement c'est d'un intérêt limité.) Implanter les verbes est la solution la plus simple et la plus rapide. Du coup, j'ai implanté 16 variantes du verbe "acheter" (4 synonymes de "billet"...) et ça marche !
Mule hollandaise
Grand Ancien
 
Messages: 1124
Inscription: Mar Aoû 29, 2006 10:57 pm

Re: [I6] >acheter x sur y

Messagepar Stormi le Mar Aoû 20, 2013 2:18 pm

J'aurais dit comme Otto, ce que tu appelles la solution "moche" est bien moins moche que de bidouiller ParseName :o
Samuel V.
Avatar de l’utilisateur
Stormi
Grand Ancien
 
Messages: 1205
Inscription: Dim Avr 16, 2006 8:07 pm
Localisation: Lyon

Re: [I6] >acheter x sur y

Messagepar Mule hollandaise le Mar Aoû 20, 2013 4:15 pm

Stormi a écrit:J'aurais dit comme Otto, ce que tu appelles la solution "moche" est bien moins moche que de bidouiller ParseName :o


C'est ce que j'ai fait, et bon, ça prend de la place dans le code source mais c'est pas très grave.
Et figure-toi que j'ai dû bidouiller ParseName comme un fou pour résoudre tous les bugs du jeu :p (si ce débogage intensif du jeu m'a appris quelque chose, c'est que ParseName c'est super puissant !! ^^)

Merci pour votre aide en tout cas, j'en vois le bout et je pense sortir la version 2 du jeu d'ici la semaine prochaine ! :)
Mule hollandaise
Grand Ancien
 
Messages: 1124
Inscription: Mar Aoû 29, 2006 10:57 pm


Retourner vers Questions techniques et aide pour votre code

Qui est en ligne

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

cron