Ich und ein Team arbeiten an einem Fabrikbauspiel, das dem Spieler zu Beginn des Spiels eine zufällige Fabrik gibt. Um sicherzustellen, dass es ein Gefühl von "Fairness" gibt, würde die zufällig erzeugte Fabrik im Idealfall eine Fläche innerhalb weniger Einheiten von (Platzhalterwert) 30 haben.
Es ist relativ einfach, einen einfachen Zufallsgenerator für Rechtecke zu schreiben, um diese Spezifikationen zu erfüllen. Unser Ziel ist jedoch, dass die Fabrik komplexer ist, vielleicht aus 2, 3 oder sogar 4 sich überschneidenden Rechtecken besteht und komplexere Formen erzeugt (denken Sie an L, Gebäude in U- und O-Form).
Ich habe versucht, ein zufälliges Rechteck zu generieren und dann mit der Basisalgebra ein zweites Rechteck auszufüllen. Bisher hatte ich jedoch kein Glück, mehr als zwei Rechtecke zu implementieren, und auch dann bin ich mit den Ergebnissen für ein Design mit nur zwei Rechtecken nicht zufrieden .
Einige weitere relevante Informationen: 2D von oben nach unten Einige der Mechaniken sind faktoriell, sodass Räume eine angemessene Länge und Breite haben sollten, um Platz für Maschinen zu schaffen.
Danke im Voraus!
BEARBEITEN: Wenn ich "gute" oder "schlechte" Ausgaben sage, ist eine schlechte Ausgabe jede Ausgabe, deren Speicherplatz vom Player nicht genutzt werden kann. Die Fabrikform begrenzt, wo der Spieler Fabrikmaschinen wie Förderbänder platzieren kann. Idealerweise sollte die Fabrik keine Bereiche mit einer Breite von nur 1-2 Blöcken haben. Die Form sollte nicht ein oder zwei große Rechtecke mit einer Linie von 1-2 Blöcken sein, die an einer Seite "hängen". Eine gute Ausgabe wäre, wenn die gesamte Bodenfläche "bearbeitbar" ist, sodass alle Bereiche mindestens 3-4 Blöcke breit sind. Eine gute Ausgabe muss nicht immer komplex sein (1 oder 2 Rechtecke sind in Ordnung), aber es sollte eine faire Chance bestehen, wenn sie aus mehr als 1-2 Rechtecken besteht.
Bei einer Einschränkung von "Alle Bereiche sind mindestens 3-4 Blöcke breit" ist die erste Idee, die mir in den Sinn kommt, etwa die folgende:
Die Grundidee ist, vorausgesetzt, Sie möchten, dass alle Bereiche mindestens eine bestimmte Größe haben. Arbeiten Sie nur in Bereichen mit dieser Größe. Wenn Sie allgemein möchten, dass etwas für alle generierten Ausgaben zutrifft, prüfen Sie, ob es für alle teilweise generierten Ausgaben zutrifft.
quelle
Ziehen Sie in Betracht, Boolesche Werte NOT und UNION zu verwenden und zufällig zwischen ihnen zu wählen.
Dann würde ich die Fläche berechnen und sie vergrößern oder verkleinern, um sie näher an die gewünschte ungefähre Größe anzupassen, und dann testen, ob es keine Abmessungen gibt, die unter einem erforderlichen Mindestbetrag liegen.
quelle