Générer un plan de ville dans une grille

9

Je veux générer un plan de ville dans une grille carrée (rendu isométrique, mais cela n'a pas d'importance) en utilisant les éléments suivants:

  • Maisons 2x2
  • Routes, 1 unité de large
  • Canaux, 1 unité de large

Exemple de mise en page:

Exemple de disposition

  • J'ai toujours un nombre précis de maisons et autant de routes et de canaux que nécessaire pour les relier toutes.
  • Les maisons doivent avoir deux morceaux de route devant leur porte d'entrée (qui pointe toujours vers la droite)
  • Ce serait bien d'avoir des champs d'herbe (vide) entre les deux.

Existe-t-il un algorithme prêt à l'emploi pour cela? Sinon, dans quelle direction devrais-je penser pour mettre en œuvre cela?

Bart van Heukelom
la source

Réponses:

8

Il existe de nombreuses façons de procéder selon la façon dont vous le souhaitez. Voici un aperçu d'une manière qui, je pense, correspondra à votre description:

Générez d'abord les canaux. Ensuite, commencez à placer des maisons au hasard, pour chaque maison que vous placez, placez la route devant elle et tracez une route de cette pièce au réseau routier existant, si ce n'est pas possible ou si vous placez la route devant, vous obtiendrez un vilain bloc 2x2 de route repositionner la maison. Détectez certains points de route proches les uns des autres mais éloignés les uns des autres en suivant les routes existantes et essayez de créer des raccourcis pour ceux-ci.

Ce genre de choses demande surtout de l'expérimentation et de l'expérience. Souvent, vous obtiendrez de bons résultats en faisant des détails de manière aléatoire, déterminez si cela répond à certains critères et annulez et réessayez si ce n'est pas le cas.

Pour cette tâche exacte, vous aurez certainement également besoin d'une bonne compréhension de la recherche de cheminement de base, sauf si vous êtes déjà un expert, allez lire sur le sujet. Et rappelez-vous que la recherche de chemin ne doit pas être à peu près le chemin le plus court, pour la dernière partie de ma description, vous voudrez peut-être donner un certain poids à la réutilisation des chemins qui sont déjà là.

Ce n'est pas du tout une tâche facile, si vous êtes bloqué, revenez nous montrer votre code et des exemples de sortie et expliquez en détail comment vous souhaitez qu'il soit différent.

aaaaaaaaaaaa
la source