kassie team mailing list archive
-
kassie team
-
Mailing list archive
-
Message #00002
Interpréteur de commande, premier jet
-
To:
kassie@xxxxxxxxxxxxxxxxxxx
-
From:
Kredh <kredh@xxxxxxx>
-
Date:
Thu, 04 Nov 2010 15:33:38 +0100
-
User-agent:
Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2.12) Gecko/20101027 Thunderbird/3.1.6
Salut tous,
Je vais m'amuser à vous vouvoyez comme si vous étiez plus de 'un'
actuellement dsl Nitrate ah ah. Bon bref restons sérieux.
Je travaille aujourd'hui sur les interpréteurs de commande. Je doute de
pouvoir aller très loin, mon emplois du temps a encore subi des
changements drastiques. Mais la théorie est en place.
Les choses ne sont pas encore très claires dans mon esprit alors je VOUS
soumet ce sujet de réflexion.
Les contextes tels que je les ai imaginé sont des formes d'interpréteur,
de chaînon d'un interpréteur pour être très précis.
Quand on demande au joueur d'entrer le nom de son compte, c'est un
contexte. Le contexte va attendre que le joueur entre un nom de compte
et agir en fonction de ce qu'il reçoit. Si le nom est invalide, il va
lui demander de l'entrer à nouveau. Si le nom est OK et qu'il existe
déjà, on le redirige vers le contexte 'entrer le mot de passe pour un
compte existant'. Si le compte n'existe pas, on le redirige vers le
contexte 'entrez le mot de passe du nouveau compte'.
Les contextes doivent donc être fait pour accepter certains schémas, en
rejeter d'autres, et rediriger dans l'un ou l'autre cas vers d'autres
contextes (ou vers le même).
Les contextes dans mon esprit sont de plusieurs formes :
- L'entrée d'information (utile pour la connexion et la création de
compte)
- L'interpréteur de commande (j'y reviens un peu plus bas)
- Les éditeurs
- Les canaux (je ne le détaillerai pas ici)
Les éditeurs ce sont ces fenêtres textuels permettant d'éditer assez
intuitivement un objet. Il existe sur Vancia pas mal d'éditeurs destinés
à la création, un pour éditer la salle, un pour éditer un objet, un pour
éditer un prototype de bot et j'en passe. Pour les joueurs il existe
l'éditeur de description personnel et l'éditeur des options.
Le principe des éditeurs est assez simple : on navigue dedans en entrant
une ou quelques lettres raccourcis. Fenêtre classique :
* Editeur de la salle ...
(T)itre de la salle :
(D)escription
(S)orties
...
En tapant S puis entrée, le bâtisseur est placé dans la sous-fenêtre
'sortie' sui peut proposer de configurer les sorties (assez logiquement).
Les éditeurs sont déclinables en plusieurs objets et pour l'instant il
est trop tôt pour en faire la liste, ce travail a d'ailleurs déjà été
fait en partie sur Vancia donc j'aurai une base.
Le type de contexte 'interpréteur de commande' est peut-être un peu
moins évident. Jusqu'ici je n'en vois qu'un seul : le contexte 'mode
connecté' qui recensera TOUTES les commandes que les joueurs pourront
entrer en étant connecté au jeu.
Voilà l'idée maîtresse. Chaque contexte possède soit une liste d'entrées
possibles, soit un schéma de validation, et des actions à faire dans tel
ou tel cas.
Ca, ça semble assez clair dans mon esprit et ça me semble assez viable
comme idée.
Ce que je VOUS propose ici c'est de réfléchir aux interpréteurs de
commande. J'aimerai que pour chaque commande on ait une syntaxe
générique qui se charge du boulot répétitif. En gros, quand vous entrez
la commande 'examine', vous devez préciser après soit un fragment d'un
nom d'objet, soit une balise de description. L'idée est d'avoir un
schéma directeur de la commande pour extraire ces informations et
retourner au joueur une erreur si sa syntaxe n'est pas correcte.
Même les commandes les plus simples auraient des schémas assez durs à
mettre en place, j'en ai conscience. Voilà à quoi on devrait arriver (en
gros hein) :
def examine(...)
"""ma commande examine"""
schema = parser_schema("<ombjet dans eq>/<objet dans inv>/>objet
sur sol>/<élément de desc> as objet_a_examiner")
# Dans schema.objet_a_examiner, on a maintenant l'objet (se
trouvant soit dans l'équipement du joueur, soit dans son inventaire,
soit sur le sol), soit un élément de la description
joueur.envoyer(schema.objet_a_examiner.description)
Je ne sais pas si c'est très clair. Biensûr, le schéma que je vous met
au-dessus est plutôt simpliste, lourd à écrire et pas très pratique. Sµi
VOUS en avez envie, je vous encourage à réfléchir à cette idée de schéma
en prenant les commandes que l'on retrouve sur la plupart des MUDs et
essayer de dégager :
* Une syntaxe de la commande
* La liste des schémas dont on aurai besoin
* Eventuellement leur syntaxe
Je ne suis pas sûr que ce soit très clair, je posterai des compléments
si c'est nécessaire.
Kredh
Follow ups