Page 1 sur 1

Création d'une nouvelle commande

MessagePosté: Sam Juil 02, 2016 11:13 am
par tvisarl
Bonjour,

Pour les besoins de mon jeu qui est une espèce de banc d'essai pour les situations les plus courantes, j'ai besoin de redéfinir le verbe "nager". J'ai donc concocté ça, où le [something] est évidemment une direction :

Code: Tout sélectionner
understand the command "swim" as something new.
understand the command "nager" as something new.
swimming is an action applying to one thing.
understand  "swim [something]" or "nager [something]" as swimming.

check swimming:
   if location is Douve:
      say "Vous êtes considérablement gêné par la végétation et vous vous fatiguez.";
   else:
      say "Vous ne pouvez pas nager ici !" instead.

carry out swimming something: try going something.


La règle "check" ne gêne pas le parser, c'est "carry out" qui pose problème : "going something" est perçu comme une condition ???

Merci de votre aide.

Re: Création d'une nouvelle commande

MessagePosté: Sam Juil 02, 2016 11:34 am
par StephaneF
going somewhere, non ?

Re: Création d'une nouvelle commande

MessagePosté: Sam Juil 02, 2016 1:34 pm
par tvisarl
Hé non ! Malheureusement... Le "somewhere" est lui aussi perçu comme une condition.

Re: Création d'une nouvelle commande

MessagePosté: Sam Juil 02, 2016 5:39 pm
par StephaneF
Code: Tout sélectionner
A waterroom is a kind of room.

Plage is a room. "Au nord, la mer.".

Mer1 is a waterroom. "Au nord, la mer continue.". Mer1 is north from Plage.

Mer2 is a waterroom. "A l[']est et au sud, la mer.". Mer2 is north from Mer1.

Mer3 is a waterroom. "A l[']ouest on retourne vers la plage.". Mer3 is east from Mer2.

Understand "swim [a direction]" as going.

Before going a direction :
if the player is not in a waterroom and the player's command includes "swim"
begin ;
   say "Vous n[']êtes pas dans l[']eau." ;
   stop the action ;
end if.

Re: Création d'une nouvelle commande

MessagePosté: Sam Juil 02, 2016 5:43 pm
par Natrium
EDIT : Azathoth a posté avant moi, donc ce que je dis recoupe un peu sa solution, qui est très bien. :) (mais j'aurais utilisé un check plutôt qu'un before, peut-être.)

Déjà, je pense que swimming n'est pas définie par défaut (en tout cas pas si tu as la dernière version de l'extension française). Pas besoin du « understand as something new » (mais ça ne fait pas de mal non plus de l'avoir).

Ensuite, comme cette commande s'utiliser avec une direction (comme « nager ouest »), il faut modifier plusieurs choses : il faut que ça s'applique à « one visible thing » (parce que les directions sont toujours visibles mais jamais touchables), et il faut ajouter des lignes de compréhension pour prendre en compte les prépositions, comme « nager vers l'ouest ». Aussi, les lignes de compréhension devraient être "nager [direction]", sinon le joueur pourra taper des choses comme « nager moi » ou « nager la lampe ».

Il y a une autre erreur dans la règle check : il faut mettre un instead à la fin de la deuxième ligne pour empêcher le joueur de nager quand il est dans les douves — sauf s'il se fatigue mais qu'il a quand même réussi, ce n'est pas clair. Dans ce dernier cas, il ne faudrait pas que ce texte soit dans une règle check car l'action n'est pas bloqué.

Enfin, pour ton problème, il est simple. Quand tu dis « try going something », Inform le comprends comme « essayer d'aller quelque chose ». Mais il ne peut pas deviner quel est ce quelque chose. Il faut utiliser le « noun », qui est l'objet de l'action (on en avait parlé récemment). Le code devient :
Code: Tout sélectionner
Carry out swimming:
    try going the noun.


Cependant, je ne vois pas trop l'intérêt d'une telle action : le joueur ne tapera sûrement pas « nager ouest » alors qu'il peut juste taper « o » (ce qui résultera en l'action going). Pourquoi ne pas juste mettre « nager » en synonyme de « aller » ?
Code: Tout sélectionner
Understand the command "swim" as "going".
Understand the command "nager" as "aller".

Ou alors, comme de toute façon il ne risque pas de taper le verbe explicitement, juste faire une action nager qui ne prend pas d'objet pour intercepter les messages si le joueur tape juste « nager ».

Enfin, c'est toi qui vois !

Re: Création d'une nouvelle commande

MessagePosté: Sam Juil 02, 2016 5:45 pm
par StephaneF
Nos réponses se sont croisées, tiens :)

Re: Création d'une nouvelle commande

MessagePosté: Sam Juil 02, 2016 6:35 pm
par tvisarl
Merci à tous :D
Vos remarques sur la faible utilité d'une telle commande sont parfaitement justifiées mais, comme je dis, "Le Château du Temps" ( vous voyez l'originalité :shock: ! ) est un banc d'essai plus qu'un jeu. Avant, j'utilisais Quest qui n'est pas ridicule du tout, d'ailleurs.

Re: Création d'une nouvelle commande

MessagePosté: Sam Juil 02, 2016 9:01 pm
par StephaneF
Natrium a dit du bien de mon code :'( je peux mourir en paix <3

Re: Création d'une nouvelle commande

MessagePosté: Sam Juil 02, 2016 9:37 pm
par Natrium
Ah mais attention, j'ai bien dit qu'il aurait mieux valu utiliser check ! Tout n'est pas encore parfait ! :twisted:

Et pour Le Château du Temps, moi je trouve que le titre est intriguant. Mais tu as raison de faire un banc d'essai, c'est comme ça qu'on apprend !

Re: Création d'une nouvelle commande

MessagePosté: Dim Juil 03, 2016 6:06 am
par StephaneF
Ça change quoi, d'ailleurs ? Je ne me suis jamais penché sur « check ».

Re: Création d'une nouvelle commande

MessagePosté: Lun Juil 04, 2016 4:05 am
par Natrium
Je te l'avais déjà expliqué !

En tant que tel, c'est surtout une distinction sémantique (chaque livre de règles a une signification précise), mais ce que tu as fait ici est bien aussi, il n'y a pas d'obligations. C'est juste que je trouve qu'un check serait plus approprié sémantiquement parlant, mais c'est en partie subjectif.

Aussi, ça aide de bien choisir la règle à utiliser quand il y en a beaucoup, pour causer le moins de conflits possible et qu'elles interagissent bien ensemble.

Enfin bref.