Generando un diseño de ciudad en una cuadrícula

9

Quiero generar un diseño de ciudad en una cuadrícula cuadrada (representada isométricamente, pero eso no importa) usando los siguientes elementos:

  • Casas 2x2
  • Caminos, 1 unidad de ancho
  • Canales, 1 unidad de ancho

Diseño de muestra:

Diseño de la muestra

  • Siempre tengo un número específico de casas y tantos caminos y canales como sea necesario para conectarlos a todos.
  • Las casas deben tener dos trozos de carretera frente a su puerta de entrada (que siempre apunta hacia la derecha)
  • Sería bueno tener campos de hierba (vacío) en el medio.

¿Hay un algoritmo listo para esto? Si no, ¿en qué dirección debería pensar para implementar esto?

Bart van Heukelom
fuente

Respuestas:

8

Hay muchas formas de ir dependiendo de cómo lo desee exactamente. Aquí hay un resumen de una forma que creo que se ajustará a su descripción:

Primero genera los canales. Luego comience a colocar casas al azar, para cada casa que coloque, coloque la carretera frente a ella y dibuje una carretera desde esa pieza hasta la red de carreteras existente, si no es posible o si coloca la carretera al frente da como resultado un feo bloque de 2x2 de Reposicionar la casa por carretera. Detecta algunos puntos de carretera que están cerca uno del otro pero muy separados siguiendo las carreteras existentes e intenta hacer algunos atajos para ellos.

Este tipo de cosas, sobre todo, requiere experimentación y experiencia. A menudo obtendrá buenos resultados haciendo algunos detalles de manera aleatoria, determine si cumple con algunos criterios y deshaga y vuelva a intentar si no lo hace.

Para esta tarea exacta, sin duda también necesitará una buena comprensión de la búsqueda básica de rutas, a menos que ya sea un experto, lea el tema. Y recuerde, la búsqueda de rutas no tiene que ser solo la ruta más corta, para la última parte de mi descripción es posible que desee dar algo de peso a la reutilización de rutas que ya están allí.

Esto no es una tarea fácil, si te quedas atascado, vuelve y muéstranos tu código y algunos resultados de ejemplo y explica en detalle cómo te gustaría que fuera diferente.

aaaaaaaaaaaa
fuente