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
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 :
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 :
>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]
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) {<>;} else {« Vous ne pouvez pas acheter de billet sur » (the) noun;}
// Ou quelque chose comme ça
];
[/code]
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.