Gerando um layout de cidade em uma grade

9

Quero gerar um layout de cidade em uma grade quadrada (renderizada isometricamente, mas isso não importa) usando os seguintes elementos:

  • Casas 2x2
  • Estradas, 1 unidade de largura
  • Canais, 1 unidade de largura

Layout da amostra:

Layout da amostra

  • Eu sempre tenho um número específico de casas e quantas estradas e canais são necessários para conectar todas elas.
  • As casas precisam ter dois trechos de estrada em frente à porta da frente (que está sempre apontando para a direita)
  • Seria bom ter campos de grama (vazio) entre eles.

Existe um algoritmo pronto para isso? Caso contrário, em que direção devo estar pensando para implementar isso?

Bart van Heukelom
fonte

Respostas:

8

Existem muitas maneiras de seguir, dependendo exatamente de como você deseja. Aqui está um esboço de uma maneira que eu acho que se encaixa na sua descrição:

Primeiro gere os canais. Em seguida, comece a colocar as casas aleatoriamente. Para cada casa que você colocar, coloque a estrada na frente dela e desenhe uma estrada daquela peça para a rede viária existente, se isso não for possível, ou colocar a estrada na frente resultará em um feio bloco 2x2 de reposicionar a casa. Detecte alguns pontos da estrada próximos um do outro, mas distantes após as estradas existentes e tente criar alguns atalhos para eles.

Acima de tudo, esse tipo de coisa requer experimentação e experiência. Frequentemente, você obtém bons resultados ao fazer alguns detalhes de maneira aleatória, determina se ele atende a alguns critérios e desfaz e tenta novamente, se não o fizer.

Para esta tarefa exata, você certamente também precisará de uma boa compreensão do caminho básico, a menos que você já seja um especialista, leia o tópico. E lembre-se, a busca de caminhos não precisa ser apenas o caminho mais curto; na última parte da minha descrição, você pode querer dar algum peso à reutilização de caminhos que já estão lá.

Essa não é uma tarefa fácil, se você ficar parado, volte e mostre seu código e algum exemplo de saída e explique em detalhes como você gostaria que fosse diferente.

aaaaaaaaaaaa
fonte