Je veux créer un jeu simple similaire aux livres à choisir soi-même. Le joueur est présenté avec un texte narratif et choisit son action dans une liste de possibilités. Ceci, à son tour, conduit à un nouveau texte narratif, à l'infini. Le seul hic, c'est qu'en fonction de certaines décisions antérieures, la liste des possibilités peut différer.
À première vue, cela ressemble à une charge d'instructions if-else, ce qui implique qu'un moteur de règles serait en place. Mais cela ressemble aussi à une machine à états finis pour moi.
Je suis sur le point d'écrire ceci en Java ou peut-être Groovy. Je suis actuellement plus intéressé par les questions conceptuelles, c'est-à-dire comment cela devrait-il être fait à un large niveau (comment les gens mettent-ils en œuvre les échecs ou les jeux de cartes, de toute façon?), Mais quelques conseils sur une bibliothèque spécifique sont également les bienvenus.
Évidemment, le "moteur de jeu" du titre ne fait pas référence à la détection de collision ou à d'autres mécanismes physiques / graphiques, mais à la logique qui décide des options qu'un joueur a données à la situation et à son état actuel.
Réponses:
Sur la base de ce que vous avez dit dans les commentaires, voici comment je le gérerais:
Implémentez l'histoire comme une machine à états finis, avec une touche. Chaque État est une page de l'histoire, et chaque transition est un lien d'une page à l'autre. Mais chaque transition a également des conditions . Les conditions peuvent être nulles, auquel cas la transition apparaît toujours comme une option disponible, mais sinon, elles doivent être évaluées lorsque la page s'affiche, et si l'évaluation revient
False
, la transition ne s'affiche pas.Il existe deux manières de base de mettre en œuvre les conditions. La première consiste à mettre en place un moteur de script à part entière dans le jeu, puis la condition ressemble
return player.inventory.contains(GUN)
. Ceci est initialement plus compliqué à configurer, mais permet des scripts plus avancés.La seconde consiste à coder en dur les conditions possibles dans une sorte d'objet. Il peut avoir un
RequiredItem
champ, et si ce champ a une valeur, vous vérifiez si la condition est remplie. Ce système est plus simple à mettre en place. Cela limite ce que vous pouvez faire beaucoup plus que le script ne le ferait, mais si vous n'avez pas besoin de la flexibilité qu'un moteur de script fournirait, c'est probablement beaucoup plus facile à utiliser.la source
Je pense que la réponse est dans le titre: vous avez besoin d'un moteur de règles. Si vous prévoyez d'écrire votre application avec Java, vous pouvez bien sûr écrire la vôtre comme l'a suggéré Gilbert Le Blanc, OU vous voudrez peut-être jeter un œil à Drools , un moteur de règles.
Avec Drools, ou tout autre moteur de règles en fait, vous pouvez définir une situation paramétrée qui génère une liste d'actions possibles. Vous pouvez encoder des règles simples comme suit:
le joueur est à la page X:
Ce qui est intéressant avec Drools, c'est que vous pouvez encoder toutes vos règles dans un fichier Excel, puis au début du jeu, faire lire à Drools ce fichier. Après que tout soit en mémoire, il vous suffit de vous soucier de votre interface utilisateur.
Voici quelques ressources pour vous aider à démarrer avec Drools:
la source
La machine d'état ressemble à une approche sûre pour modéliser votre jeu. Il existe de nombreuses bibliothèques pour des fictions interactives:
http://en.wikipedia.org/wiki/Category:Text_adventure_game_engines
non mentionné dans wikipedia, la ficelle est très populaire en ce moment.
la source
Conceptuellement, votre jeu est simple. En psudeocode, cela ressemblerait à quelque chose comme ceci:
Maintenant, enchaîner tout le texte ensemble pour qu'il passe d'une action à l'autre est la partie difficile. Vous pouvez utiliser une base de données relationnelle. Vous pourriez utiliser un arbre.
Il est un peu difficile d'être plus précis sans savoir quel langage informatique vous souhaitez utiliser. Puisque vous avez mentionné Java, je pencherais davantage pour une structure arborescente.
Créez une classe de réponses contenant une réponse et un lien vers une classe de texte.
Créez une classe de texte contenant le texte d'aventure et une liste de réponses comme instances de la classe de réponse.
Modifié pour répondre au commentaire:
Vous ne calculez rien sur la base de ce modèle. En utilisant votre exemple, l'arborescence ressemblerait à quelque chose comme ceci, où T est le texte et A est un choix d'action:
Oui, il y a une certaine duplication du texte, mais en suivant la chaîne, les actions futures peuvent prendre en compte les décisions passées. C'est un énorme arbre de décision.
la source