Estoy haciendo un juego de aventura de apuntar y hacer clic, y actualmente estoy tratando de encontrar la mejor manera de implementar un sistema de comando.
Asuma una interfaz de estilo Monkey Island o Maniac Mansion, con una paleta de verbos y objetos en la escena y en el inventario. Al hacer clic en estos, construyes una oración para ejecutar.
por ejemplo, puede hacer clic look at
y luego en un árbol para "mirar el árbol" o hacer clic en una manzana, y luego give
, y luego en una niña, para obtener "dar manzana a niña".
Hay tres formas posibles de una oración:
verb
, por ejemplo "guardar"verb noun
, por ejemplo "recoger manzana", "mirar pulpo"verb noun noun
, por ejemplo, "dar encurtido al perro rabioso", "usar la palanca con el tarro de encurtidos"
En diferentes situaciones, querré que la acción que se lleve a cabo esté definida por diferentes objetos.
Por ejemplo, para el give
verbo, puede haber una acción predeterminada definida que haga que el personaje diga algo como "Prefiero aferrarme a eso", o el perro rabioso podría definir una acción donde se come cualquier cosa que intentes darle. .
Si la interfaz va a funcionar como Maniac Mansion, entonces construye la oración y luego le dice que se ejecute (en Maniac Mansion, ya sea haciendo clic en la oración o haciendo clic nuevamente en la última cosa en la que hizo clic).
Si va a funcionar como Monkey Island, la oración se ejecuta tan pronto como esté completa, lo que plantea un problema para verbos como los use
que a veces pueden tomar un sustantivo y otras dos veces.
Entonces, ¿cómo implementaría un sistema que maneje esto?
fuente
look
que es un verbo de un solo sustantivo, etcRespuestas:
Puede resultarle más fácil de usar si invierte el orden de selección. Entonces, el usuario hace clic en un sustantivo y luego el juego muestra el conjunto de verbos que se pueden realizar en ese sustantivo. Si el verbo requiere un objeto (es decir, "dar a ___", entonces el juego espera a que el usuario seleccione el objeto antes de realizar la acción.
Algo como:
En cuanto a la implementación, cada objeto en el juego necesita tener datos para:
Dado que la gramática realmente no anida ni nada, no debería necesitar algo tan complicado como un patrón de intérprete.
fuente
Les presento una solución simplista. Se puede extender, por supuesto.
Creo que una simple lista de (verbo, objeto1, objeto2) lo resolvería:
Cómo manejar los valores predeterminados:
Algunos ejemplos:
Se puede extender:
fuente
Aquí hay dos problemas: interpretar la entrada del jugador en un árbol de sintaxis, luego ejemplificar ese árbol.
Para la primera etapa, haría que cada botón de verbo creara una instancia de verbo concreta derivada de alguna interfaz de verbo. Esa instancia se pasaría más sustantivos o verbos para su validación. Si es válido, adjuntaría el sustantivo a su árbol de sintaxis interna, de lo contrario lo rechazaría con un error apropiado.
Después de presionar cada botón, puede preguntarle al árbol de verbos si estaba en un estado válido para continuar (para la entrada de estilo Monkey Island).
Una vez en la segunda etapa, el verbo concreto sería responsable de analizar su propio árbol y actualizar el estado del juego.
Una solución más compleja implicaría analizar el árbol externamente al verbo. Cada elemento del árbol sería responsable de pequeñas acciones que juntas produjeran el resultado deseado. Este enfoque le permitiría hacer oraciones más emergentes a partir de pequeños bloques de construcción.
Consulte el patrón de intérprete para obtener más información sobre la etapa de análisis.
fuente