Quiero hacer un juego simple similar a los libros de elige tu propia aventura. Al jugador se le presenta un texto narrativo y puede elegir su acción de una lista de posibilidades. Esto, a su vez, conduce a un nuevo texto narrativo, hasta el infinito. El único inconveniente es que, dependiendo de algunas decisiones anteriores, la lista de posibilidades puede diferir.
A primera vista, esto suena como una carga de declaraciones if-else, lo que implica que un motor de reglas estaría en su lugar. Pero, también me parece una máquina de estados finitos.
Estoy a punto de escribir esto en Java o quizás en Groovy. Actualmente estoy más interesado en los problemas conceptuales, es decir, ¿cómo se debe hacer esto a un nivel amplio (de todos modos, ¿cómo implementan las personas los juegos de ajedrez o de cartas?), Pero algunos consejos sobre una biblioteca específica también son bienvenidos.
Obviamente, el "motor del juego" del título no se refiere a la detección de colisiones u otra física / mecánica de gráficos, sino a la lógica que decide qué opciones le ha dado un jugador a la situación y su estado actual.
Respuestas:
Según lo que has dicho en los comentarios, así es como lo manejaría:
Implemente la historia como una máquina de estados finitos, con un giro. Cada estado es una página de la historia, y cada transición es un enlace de una página a otra. Pero cada transición también tiene condiciones . Las Condiciones pueden ser nulas, en cuyo caso la Transición siempre aparece como una opción disponible, pero si no, deben evaluarse cuando aparece la página, y si la evaluación regresa
False
, la Transición no aparece.Hay dos formas básicas de implementar las Condiciones. El primero es configurar un motor de script completo dentro del juego, y luego se ve la Condición
return player.inventory.contains(GUN)
. Inicialmente, esto es más complicado de configurar, pero permite secuencias de comandos más avanzadas.El segundo es codificar las posibles condiciones en algún tipo de objeto. Podría tener un
RequiredItem
campo, y si ese campo tiene un valor, verifique si se cumple la condición. Este sistema es más sencillo de configurar. Limita mucho más lo que puede hacer que las secuencias de comandos, pero si no necesita la flexibilidad que proporcionaría un motor de secuencias de comandos, probablemente sea mucho más fácil de usar.fuente
Creo que la respuesta está en el título: necesitas un motor de reglas. Si planea escribir su aplicación con Java, por supuesto, puede escribir la suya como sugirió Gilbert Le Blanc, O tal vez quiera echar un vistazo a Drools , un motor de reglas.
De hecho, con Drools, o cualquier otro motor de reglas, puede definir una situación parametrizada que genere una lista de posibles acciones. Puede codificar reglas simples que suc tiene:
El jugador está en la página X:
Lo interesante de Drools es que puedes codificar todas tus reglas en un archivo de Excel, y luego, al comienzo del juego, hacer que Drools lea ese archivo. Después de eso, todo está en la memoria, solo necesita preocuparse por su interfaz de usuario.
Aquí hay algunos recursos para ayudarlo a comenzar con Drools:
fuente
La máquina de estados suena como un enfoque seguro para modelar tu juego. Hay muchas bibliotecas para ficciones interactivas:
http://en.wikipedia.org/wiki/Category:Text_adventure_game_engines
no mencionado en wikipedia, el hilo es muy popular en este momento.
fuente
Conceptualmente, tu juego es sencillo. En psudeocode, se vería así:
Ahora, encadenar todo el texto para que fluya de una acción a la siguiente es la parte difícil. Podrías usar una base de datos relacional. Podrías usar un árbol.
Es un poco difícil ser más específico sin saber qué lenguaje de computadora quieres usar. Como mencionó Java, me inclinaría más hacia una estructura de árbol.
Cree una clase de respuesta que contenga una respuesta y un enlace a una clase de texto.
Cree una clase de texto que contenga el texto de aventura y una Lista de respuestas como instancias de la clase de respuesta.
Editado para responder el comentario:
No calculas nada basado en este modelo. Usando su ejemplo, el árbol se vería así, donde T es el texto y A es una opción de acción:
Sí, hay cierta duplicación de texto, pero al seguir la cadena, las acciones futuras pueden tener en cuenta las decisiones pasadas. Es un gran árbol de decisiones.
fuente