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?

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.