Acabo de comenzar un nuevo proyecto en el que me gustaría que el mundo del juego constara de ubicaciones generadas por procedimientos conectadas por teletransportadores. Después de un poco de investigación, descubrí que esto se llama "teoría de grafos" o "sangrientamente complicado", dependiendo de quién lo esté discutiendo. Desafortunadamente, he encontrado muy poca información sobre la generación de gráficos; La mayoría de las herramientas que he visto están dirigidas a examinar los gráficos existentes.
Suponiendo que tengo la terminología correctamente ordenada, mis requisitos son que el gráfico sea:
- simple: ninguna ubicación (vértice) debe tener un teletransportador (borde) que se conecte de nuevo a sí mismo, ni dos vértices deben tener múltiples bordes que los conecten
- conectado: debería ser posible viajar entre dos vértices en el gráfico (aunque no preveo la necesidad de encontrar el camino; simplemente saber que el jugador podría encontrar uno si lo desea es suficiente)
- cíclico: debe haber más de una ruta entre dos vértices
- no dirigido: todos los bordes se pueden recorrer en cualquier dirección
- infinito: si el jugador lo desea, debería poder viajar indefinidamente, y el gráfico continuará generando incrementalmente a medida que se acerque a
susvérticesmásinexplorados. - localmente finito: el grado de vértice nunca debe cambiar después de que el jugador lo haya visitado
- etiquetado de manera estable: cada vértice representa una ubicación que se generará a partir de una semilla; la misma semilla debe asignarse a un vértice independientemente de la ruta que el jugador usó para viajar allí o qué tan grande es el gráfico cuando lo hacen
He tenido algunas ideas (que aún no he intentado implementar) con respecto al uso de los máximos locales del ruido de perlin 2D como vértices (la entrada x e y podrían usarse como su etiqueta), pero eso se siente torpe y complicado.
¿Hay una mejor manera de generar un gráfico como este? Estoy desarrollando en Python 2.6 usando Panda3D y numpy, ¡y por supuesto estaría dispuesto a incluir otras bibliotecas si ayudan con este problema!
Editar
Creo que he hecho un mal trabajo explicando algunos de mis requisitos, ¡así que es hora de ilustración! Con suerte, esto aclarará las cosas.
Lo que quiero decir con tener etiquetas estables es que quiero, por ejemplo, que el Jugador A pueda explorar y encontrar, entre otras cosas, un camino cíclico de regreso a su ubicación inicial y una montaña que parezca un gato. Su juego ahora se parece a lo siguiente (los vértices están numerados con sus semillas y bordes con el orden en que los atravesó el jugador). Comenzó en el vértice 8329 (verde) y Happycat Mountain está en el vértice 6745 (azul).
Buen amigo del jugador A El jugador B es un fanático de los gatos, por lo que quiere mostrárselo. Él le da la semilla raíz de su mundo y direcciones a lo largo de la ruta más corta a la montaña de interés. Su juego ahora debería verse así:
El problema con el que actualmente tengo más dificultades es "¿Cómo genero las mismas semillas para el Jugador B cuando su exploración no ha seguido el mismo camino?" Eso es lo que me llevó a la idea de usar el ruido Perlin: mientras se use la misma semilla raíz, los máximos no se moverán, por lo que sus coordenadas podrían usarse como semillas de vértices estables.