Je fais un jeu d'aventure pointer-cliquer, et j'essaie actuellement de trouver la meilleure façon de mettre en œuvre un système de commande.
Supposons une interface de style Monkey Island ou Maniac Mansion, avec une palette de verbes et d'objets dans la scène et dans l'inventaire. En cliquant dessus, vous créez une phrase à exécuter.
par exemple, vous pouvez cliquer sur look at
puis sur un arbre pour obtenir "regarder l'arbre" ou sur une pomme, give
puis sur une fille pour obtenir "donner une pomme à une fille".
Il existe trois formes possibles de phrase:
verb
, par exemple "enregistrer"verb noun
, par exemple "ramasser la pomme", "regarder la pieuvre"verb noun noun
, par exemple "donner des cornichons à un chien enragé", "utiliser un pied de biche avec un bocal à cornichons"
Dans différentes situations, je souhaite que l'action à exécuter soit définie par différents objets.
Par exemple, pour le give
verbe, il pourrait y avoir une action par défaut définie qui fait dire au personnage quelque chose comme "Je préférerais m'y accrocher", ou le chien enragé peut définir une action où il mange tout ce que vous essayez de lui donner. .
Si l'interface doit fonctionner comme Maniac Mansion, vous créez la phrase, puis lui dites de s'exécuter (dans Maniac Mansion, soit en cliquant sur la phrase, soit en cliquant à nouveau sur la dernière chose sur laquelle vous avez cliqué).
Si cela doit fonctionner comme Monkey Island, la phrase s'exécute dès qu'elle est terminée, ce qui pose un problème pour les verbes comme ceux use
qui peuvent parfois prendre un nom, et d'autres fois deux.
Alors, comment mettriez-vous en œuvre un système qui gère cela?
la source
look
comme un verbe à nom unique, etc.Réponses:
Vous pouvez trouver plus facile à utiliser si vous inversez l'ordre de sélection. Ainsi, l'utilisateur clique sur un nom , puis le jeu affiche l'ensemble des verbes qui peuvent être exécutés sur ce nom. Si le verbe nécessite un objet (c'est-à-dire "donner à ___", alors le jeu attend que l'utilisateur sélectionne l'objet avant d'effectuer l'action.
Quelque chose comme:
Au niveau de l'implémentation, chaque objet du jeu doit avoir des données pour:
Puisque la grammaire n'est pas vraiment imbriquée ou quoi que ce soit, vous ne devriez pas avoir besoin de quelque chose d'aussi compliqué qu'un modèle d'interpréteur.
la source
Je présente une solution simpliste. Il peut bien entendu être prolongé.
Je pense qu'une simple liste de (verbe, objet1, objet2) le résoudrait:
Comment gérer les valeurs par défaut:
Quelques exemples:
Il peut être étendu:
la source
Il y a deux problèmes ici: interpréter l'entrée du joueur dans un arbre de syntaxe, puis exécuter cet arbre.
Pour la première étape, chaque bouton verbe créerait une instance concrète de verbe dérivée d'une interface verbale. Cette instance recevrait d'autres noms ou verbes pour validation. S'il est valide, il attacherait le nom à son arbre de syntaxe interne, sinon il le rejetterait avec une erreur appropriée.
Après chaque pression sur un bouton, vous pouvez demander à l'arborescence des verbes s'il était dans un état valide pour continuer (pour l'entrée de style Monkey Island).
Une fois à la deuxième étape, le verbe concret serait chargé d'analyser son propre arbre et de mettre à jour l'état du jeu.
Une solution plus complexe impliquerait d'analyser l'arbre extérieurement au verbe. Chaque élément d'arbre serait responsable de petites actions qui, ensemble, produisaient le résultat souhaité. Cette approche vous permettrait de faire des phrases plus émergentes à partir de petits blocs de construction.
Consultez le modèle d' interpréteur pour plus d'informations sur l'étape d'analyse.
la source