Moi-même et une équipe travaillons sur un jeu de construction d'usine qui donne au joueur une usine aléatoire au début du jeu. Pour essayer de faire en sorte qu'il y ait un sentiment d '«équité», l'idéal serait que l'usine générée de façon aléatoire ait une superficie de quelques unités de (valeur d'espace réservé) 30.
Il est relativement simple d'écrire un générateur de rectangle aléatoire de base pour répondre à ces spécifications, mais notre objectif est que l'usine soit plus complexe, peut-être composée de 2, 3 ou même 4 rectangles qui se croisent, produisant des formes plus complexes (pensez à L, Bâtiments en forme de U et O).
J'ai essayé de générer un rectangle aléatoire, puis d'utiliser l'algèbre de base pour remplir un deuxième rectangle, mais jusqu'à présent, je n'ai eu aucune chance d'implémenter plus de 2 rectangles, et même dans ce cas, je ne suis pas satisfait des résultats pour un design à 2 rectangles seulement .
Quelques informations plus pertinentes: 2D de haut en bas Certaines des mécaniques sont de style factorio, donc les pièces devraient avoir une longueur et une largeur raisonnables pour laisser de la place aux machines Actuellement à Java et à Lua (peuvent utiliser des bibliothèques intégrées à partir de l'une ou l'autre si nécessaire)
Merci d'avance!
EDIT: Quand je dis «bonnes» ou «mauvaises» sorties, une mauvaise sortie serait toute sortie dont l'espace est inutilisable par le lecteur. La forme d'usine limite l'endroit où le joueur peut placer des machines d'usine telles que des bandes transporteuses. Idéalement, l'usine ne devrait pas avoir de zones de 1 à 2 blocs de large, la forme ne devrait pas être un ou deux grands rectangles avec une ligne de 1 à 2 blocs "suspendus" d'un côté. Une bonne sortie serait là où tout l'espace au sol est "réalisable", donc toutes les zones ont au moins 3 à 4 blocs de largeur. Une bonne sortie ne doit pas toujours être complexe (1 ou 2 rectangles est correct), mais elle devrait avoir une bonne chance si elle est composée de plus de 1-2 rectangles.
Étant donné une restriction de "toutes les zones sont à au moins 3-4 blocs de large" la première idée qui me vient à l'esprit est quelque chose comme ceci:
L'idée de base est, étant donné que vous voulez que toutes les zones aient au moins une taille donnée, ne travaillez que dans des zones de cette taille. Plus généralement, si vous voulez que quelque chose soit vrai pour toutes les sorties générées, voyez si cela peut être rendu vrai pour toutes les sorties partiellement générées.
la source
Pensez à utiliser les booléens NOT et UNION et à choisir entre eux au hasard.
Ensuite, je calculerais la zone et la ferais monter ou descendre pour correspondre plus étroitement à la taille approximative que vous recherchez, puis tester qu'il n'y a pas de dimensions inférieures à un montant minimum requis.
la source