Advertisement
  1. Game Development
  2. Platform Agnostic

Procedimiento Generación de Rompecabezas Simples

by
Read Time:8 minsLanguages:

Spanish (Español) translation by Alfonso Mora (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Rompecabezas son parte integrante del juego de muchos géneros. Si simple o compleja, desarrollar puzzles manualmente puede convertirse rápidamente en engorrosos. Este tutorial tiene como objetivo aliviar esa carga y allanar el camino para otros, más divertidos, aspectos de diseño.

Juntos vamos a crear un generador para componer el rompecabezas "nested" procedimientos simples. El tipo de rompecabezas que nos centraremos en es el tradicional "cerradura y clave" más a menudo se itera como: conseguir x artículo para desbloquear y área. Este tipo de rompecabezas puede llegar a ser tedioso para los equipos de trabajo en ciertos tipos de juegos, especialmente correas eslabonadas de la mazmorra, Areneros y juegos de rol donde rompecabezas son más a menudo confiar en contenido y exploración.

Mediante la generación de procedimientos, nuestro objetivo es crear una función que toma unos pocos parámetros y devuelve un activo más complejo para nuestro juego. Aplicando este método proporcionará un rendimiento exponencial en el tiempo de desarrollo sin sacrificar la calidad de juego. Consternación de desarrolladores también puede disminuir como efecto secundario feliz.

¿Qué Necesito Saber?

Para seguir a lo largo, necesita estar familiarizado con un lenguaje de programación de su elección. Ya que la mayoría de lo que estamos debatiendo es sólo de datos y generalizado en pseudocódigo, bastará con cualquier lenguaje de programación orientado a objetos.

De hecho, algunos editores de drag-and-drop también funcionará. Si desea crear una demo jugable del generador mencionado aquí, también necesita cierta familiaridad con su biblioteca de juegos preferido.

Crear el Generador

Comencemos con un vistazo a algunos pseudocódigo. Los bloques más básicos de nuestro sistema van a ser claves y habitaciones. En este sistema, un jugador se prohibió entrar en la puerta de la habitación a menos que poseen su clave. Esto es lo que vería esos dos objetos como las clases:

Nuestra clase dominante sólo tiene dos piezas de información ahora: la ubicación de la clave, y si el jugador tiene esa clave en su inventario. Sus dos funciones son inicialización y recogida. Inicialización determina los fundamentos de una nueva clave, mientras que la recolección es para cuando un jugador interactúa con la llave.

A su vez, nuestra clase de habitación también contiene dos variables: isLocked, que contiene el estado actual de la cerradura de la habitación y assocKey, que contiene el objeto clave que desbloquea esta habitación específica. Contiene una función de inicialización así: uno para llamar al abrir la puerta y otro para comprobar si la puerta puede abrirse en la actualidad.

Una sola puerta y una llave son divertidos, pero siempre nos podemos condimentar para arriba con la anidación. Implementación de esta función nos permite crear puertas en puertas mientras servía como nuestro generador primario. Para mantener la anidación, necesitamos agregar algunas variables adicionales a nuestra puerta, así:

Este generador de código hace lo siguiente:

  1. Tomando el parámetro de nuestro rompecabezas generados (específicamente cuántas capas profundas una sala anidada debe ir).

  2. Crear dos matrices: una para las habitaciones que se están verificando para nidificación potencial y otro para el registro de habitaciones anidadas ya.

  3. Creando un espacio inicial para contener toda la escena y luego agregarlo en el arreglo de discos para verificar más adelante.

  4. Teniendo la habitación en la parte delantera de la matriz para poner a través del lazo.

  5. Comprobación de la profundidad de la habitación actual contra la profundidad máxima proporcionada (decide si crear una sala más de niño o si completamos el proceso).

  6. Establecimiento de una nueva sala y llenar con la información necesaria de la habitación padres.

  7. Adición de la nueva sala a la matriz de roomsToCheck y hacia el cuarto anterior de la matriz final.

  8. Repitiendo este proceso hasta completar todas las habitaciones en el array.

Ahora podemos tener tantas habitaciones como nuestra máquina puede manejar, pero todavía necesitamos llaves. Colocación clave tiene un reto: solvencia. Donde ponemos la clave, tenemos que asegúrese de que un jugador puede acceder a él! No importa cómo excelente parece la caché de claves oculta, si el jugador no puede alcanzarlo, él o ella está atrapada con eficacia. Para el jugador para continuar a través de rompecabezas, las llaves deben ser obtenibles.

El método más sencillo para garantizar solvencia en nuestro puzzle es utilizar el sistema jerárquico de relaciones de objeto de padre-hijo. Ya que cada habitación se encuentra dentro de otro, se espera que un jugador debe tener acceso a los padres de cada habitación para llegar a ella. Así, mientras la tecla está por encima de la sala de la cadena jerárquica, garantizamos que nuestro jugador es capaz de acceder.

Para agregar la generación de claves para nuestra generación procesal, pondremos el siguiente código en nuestra función principal:

Este código extra ahora producirá una lista de todas las habitaciones que están por encima de su actual sitio en la jerarquía de mapas. A continuación, elija uno de ellos al azar y establecer ubicación de la clave a esa habitación. Después de esto, asignamos la clave a la sala que se desbloquee.

Cuando llama, nuestra función de generador cree y devuelva un número determinado de habitaciones con llaves, potencialmente ahorrando horas de tiempo de desarrollo ahora!

Que envuelve la parte de pseudocódigo de nuestro generador de rompecabezas simple, así que ahora vamos a ponerlo en marcha.

Demo de Generación de Rompecabezas Procesal

Hemos construido nuestra demo usando JavaScript y la librería Crafty.js para mantenerlo lo más ligera posible, lo que nos permite mantener nuestro programa bajo 150 líneas de código. Hay tres componentes principales de nuestro demo lo dispuesto a continuación:

  1. El jugador puede mover a lo largo de cada nivel, recoger llaves y abrir las puertas.

  2. Se ejecuta el generador que vamos a utilizar para crear un nuevo mapa automáticamente cada vez que corra la demo.

  3. Una extensión para nuestro generador integrar con Crafty.js, que nos permite almacenar información de objeto, colisión y entidad.

El pseudocódigo anterior actúa como una herramienta para la explicación, para implementar el sistema en su propio lenguaje de programación requiere alguna modificación.

Para nuestra demostración, una porción de las clases se simplifican para un uso más eficiente en JavaScript. Esto incluye dejar caer ciertas funciones relacionadas con las clases, ya que JavaScript permite para facilitar el acceso a las variables dentro de las clases.

Para crear el juego parte de nuestro demo, inicializamos Crafty.js y, a continuación, una entidad de jugador. A continuación damos nuestra entidad jugador los controles básicos de la dirección de cuatro y alguna detección de colisiones menores para evitar entrar en bloqueado habitaciones.

Habitaciones reciben ahora una entidad astuta, almacenando información sobre su tamaño, ubicación y color para la representación visual. También vamos a añadir una función de dibujo para crear una sala y dibujarla en la pantalla.

Ofrecemos llaves con adiciones similares, incluyendo el almacenamiento de su astuto entidad, tamaño, ubicación y color. Las llaves también serán codificados por color para que coincida con las habitaciones que desbloquear. Por último, ahora podemos colocar las teclas y crear sus entidades usando una nueva función de drenaje.

Por último pero no menos importante, a desarrollar una función auxiliar pequeña que crea y devuelve un valor de color hexadecimal aleatorio para quitar la carga de la elección de colores. A menos que usted tiene gusto swatching colores, por supuesto.

¿Qué Hago Siguiente?

Ahora que tienes tu propio generador simple, aquí están algunas ideas para la ampliación de los ejemplos:

  1. Puerto del generador para permitir uso en el lenguaje de programación de elección.

  2. Ampliar el generador para incluyen la creación de salas de ramificación para mayor personalización.

  3. Añadir la capacidad para manejar múltiples entradas de habitación a nuestro generador para permitir un rompecabezas más complejos.

  4. Ampliar el generador para permitir la colocación clave en lugares más complicados para mejorar la resolución de problemas de reproductor. Esto es especialmente interesante cuando se combina con varias rutas para los jugadores.

Terminando

Ahora que hemos creado juntos este generador de rompecabezas, utiliza los conceptos muestra para simplificar su propio ciclo de desarrollo. ¿Qué tareas repetitivas te encuentras haciendo? ¿Qué te molesta más sobre la creación de su juego?

Es probable que, con la generación un poco de planificación y de procedimiento, usted puede hacer el proceso mucho más simple. Que nuestro generador le permitirá concentrarse en las partes más apetecibles de hacer juego al cortar a lo mundano.

Buena suerte, y espero verte en los comentarios!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.