Désambiguation pour non-débutants

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

Modérateurs: Stormi, Otto Grimwald

Désambiguation pour non-débutants

Messagepar tvisarl le Mar Avr 03, 2018 2:47 pm

Bonjour.

Regardez-moi ça. Pas sale, hein ?

"Vous pouvez voir la tour Quic-en-Groigne, le donjon, les courtines, la tour Générale, la tour des Moulins, la caserne, la tour des Dames et le petit donjon."

Que dois-je faire si le joueur tape "x tour" ou "x donjon", à part rester comme une poule devant un couteau ?

P.S : C'est un endroit réel, évidemment. Je ne peux donc rien y changer.

P.P.S : Et je crois que j'ai trouvé la réponse. Voilà :

Code: Tout sélectionner
After reading a command when location is CourW or location is CourE:
   if the player's command matches the regular expression "(?i)x.*tour":
      say "Vous n'êtes assez près d'aucune des quatre tours.";
      reject the player's command;
   otherwise:
      if the player's command matches the regular expression "(?i)x.*donjon":
         say "Vous n'êtes assez près d'aucun des deux donjons.";
         reject the player's command;

Y-aurait-il une meileure expression régulière ?

Merci.
tvisarl
Celui qui attend à l'affût
 
Messages: 129
Inscription: Sam Juin 18, 2016 9:20 am

Re: Désambiguation pour non-débutants

Messagepar Natrium le Ven Avr 06, 2018 7:37 pm

Sauf que tu n'as pas précisé ce que tu veux faire exactement si la commande est ambiguë. De ton code, je dirais que tu veux juste bloquer ? De ce que je comprends, tu ne veux pas que le jeu demande de préciser pour ensuite juste dire que ce n'est pas possible d'interagir ?

Si c'est le cas, c'est effectivement un problème difficile. Utiliser une expression régulière est en revanche une mauvaise idée selon moi, étant donné qu'il est facile d'oublier des cas (par exemple, je pense que tu n'as pris en compte que "x", et pas "examiner" ou "regarder", entre autres commandes) et qu'il y aura vraisemblablement toujours une commande qui passera quand même.

Une possible solution, c'est de créer une tour générique et de rediriger vers les actions vers elle.

Code: Tout sélectionner
The tour-générique is a privately-named backdrop. It is in CourW and CourE.
Understand "tour/donjon" as the tour-générique.

Does the player mean doing something with the tour-générique: it is very likely.

[Pour ne pas afficher la parenthèse de clarification.]
For clarifying the parser's choice of la tour-générique while examining: do nothing

Instead of examining the tour-générique, say "Vous n'êtes assez près d'aucune des quatre tours.

Tu pourrais aussi te passer de la tour générique et rediriger vers une tour arbitraire:

Code: Tout sélectionner
Does the player mean doing something with la tour Générale: it is very likely.

For clarifying the parser's choice of la tour Générale while examining: do nothing

(Section 17.19 et 18.30 de la doc.)

C'est toujours problématique de gérer la désambiguïsation, il se peut que les différents codes ci-dessus ajoute des effets secondaires, qu'il faudra corriger de la même façon, ce qui pourrait ajouter d'autres effets secondaires, et ainsi de suite. Alors fais au mieux, et parfois il vaut mieux juste laisser tomber. C'est malheureux, mais c'est comme ça. :(

(Ah, et je pense qu'il y a un problème dans ta régex : ".*" signifie n'importe quelle suite de 0 ou plus caractères, donc ça prendra en compte "xtour" ou "xdfrhtdtour". Il faut écrire "\s+" pour une espace ou plus.)
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1048
Inscription: Mar Oct 04, 2011 11:18 pm

Re: Désambiguation pour non-débutants

Messagepar tvisarl le Sam Avr 07, 2018 10:35 am

Merci beaucoup, Natrium. Je vais essayer la tour générique qui effectivement correspond bien à mon problème.
tvisarl
Celui qui attend à l'affût
 
Messages: 129
Inscription: Sam Juin 18, 2016 9:20 am


Retourner vers Questions techniques et aide pour votre code

Qui est en ligne

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