Création d'une nouvelle commande

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

Modérateurs: Stormi, Otto Grimwald

Création d'une nouvelle commande

Messagepar tvisarl le Sam Juil 02, 2016 11:13 am

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.
tvisarl
Grand Ancien
 
Messages: 166
Inscription: Sam Juin 18, 2016 9:20 am

Re: Création d'une nouvelle commande

Messagepar StephaneF le Sam Juil 02, 2016 11:34 am

going somewhere, non ?
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 547
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: Création d'une nouvelle commande

Messagepar tvisarl le Sam Juil 02, 2016 1:34 pm

Hé non ! Malheureusement... Le "somewhere" est lui aussi perçu comme une condition.
tvisarl
Grand Ancien
 
Messages: 166
Inscription: Sam Juin 18, 2016 9:20 am

Re: Création d'une nouvelle commande

Messagepar StephaneF le Sam Juil 02, 2016 5:39 pm

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.
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 547
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: Création d'une nouvelle commande

Messagepar Natrium le Sam Juil 02, 2016 5:43 pm

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 !
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1165
Inscription: Mar Oct 04, 2011 11:18 pm

Re: Création d'une nouvelle commande

Messagepar StephaneF le Sam Juil 02, 2016 5:45 pm

Nos réponses se sont croisées, tiens :)
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 547
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: Création d'une nouvelle commande

Messagepar tvisarl le Sam Juil 02, 2016 6:35 pm

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.
tvisarl
Grand Ancien
 
Messages: 166
Inscription: Sam Juin 18, 2016 9:20 am

Re: Création d'une nouvelle commande

Messagepar StephaneF le Sam Juil 02, 2016 9:01 pm

Natrium a dit du bien de mon code :'( je peux mourir en paix <3
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 547
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: Création d'une nouvelle commande

Messagepar Natrium le Sam Juil 02, 2016 9:37 pm

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 !
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1165
Inscription: Mar Oct 04, 2011 11:18 pm

Re: Création d'une nouvelle commande

Messagepar StephaneF le Dim Juil 03, 2016 6:06 am

Ça change quoi, d'ailleurs ? Je ne me suis jamais penché sur « check ».
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 547
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: Création d'une nouvelle commande

Messagepar Natrium le Lun Juil 04, 2016 4:05 am

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.
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1165
Inscription: Mar Oct 04, 2011 11:18 pm


Retourner vers Questions techniques et aide pour votre code

Qui est en ligne

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