Désambiguation pour non-débutants

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à :

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.

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]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.[/code]
Tu pourrais aussi te passer de la tour générique et rediriger vers une tour arbitraire:

[code]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[/code]
(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. :frowning:

(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.)

Merci beaucoup, Natrium. Je vais essayer la tour générique qui effectivement correspond bien à mon problème.