Ich versuche, zufällig ein gerichtetes Diagramm zu erstellen, um ein Puzzlespiel zu erstellen, das den Eisrutschpuzzles von Pokemon ähnelt.
Dies ist im Wesentlichen das, was ich zufällig generieren möchte: http://bulbanews.bulbagarden.net/wiki/Crunching_the_numbers:_Graph_theory .
Ich muss in der Lage sein, die Größe des Diagramms in einer x- und y-Dimension zu begrenzen. In dem im Link angegebenen Beispiel wäre es auf ein 8x4-Raster beschränkt.
Das Problem, auf das ich stoße, besteht nicht darin, den Graphen zufällig zu generieren, sondern zufällig einen Graphen zu generieren, den ich in einem 2D-Raum richtig abbilden kann, da ich etwas (wie einen Stein) auf der gegenüberliegenden Seite eines Knotens benötige, um ihn zu erstellen Optisch sinnvoll, wenn Sie aufhören zu rutschen. Das Problem dabei ist, dass der Stein manchmal auf dem Weg zwischen zwei anderen Knoten oder möglicherweise auf einem anderen Knoten selbst landet, wodurch der gesamte Graph gebrochen wird.
Nachdem wir das Problem mit einigen mir bekannten Personen besprochen hatten, kamen wir zu einigen Schlussfolgerungen, die zu einer Lösung führen könnten.
- Einbeziehen der Hindernisse in das Raster als Teil des Diagramms bei der Erstellung.
- Beginnen Sie mit einem vollständig ausgefüllten Raster und zeichnen Sie einfach einen zufälligen Pfad und löschen Sie Blöcke, damit dieser Pfad funktioniert.
Das Problem besteht dann darin, herauszufinden, welche gelöscht werden müssen, um die Einführung eines zusätzlichen, kürzeren Pfads zu vermeiden. Wir dachten auch, dass ein dynamischer Programmieralgorithmus von Vorteil sein könnte, obwohl keiner von uns zu geschickt darin ist, dynamische Programmieralgorithmen aus dem Nichts zu erstellen. Alle Ideen oder Referenzen darüber, wie dieses Problem offiziell genannt wird (wenn es sich um ein offizielles Grafikproblem handelt), wären am hilfreichsten.
Hier sind einige Beispiele dafür, was ich bisher erreicht habe, indem ich nur zufällig Blöcke platziert und das Navigationsdiagramm aus dem ausgewählten Start / Ziel generiert habe. Die Idee (wie im vorherigen Link beschrieben) ist, dass Sie am grünen S beginnen und zum grünen F gelangen möchten. Sie bewegen sich dazu nach oben / unten / links / rechts und bewegen sich weiter in die gewählte Richtung, bis Sie a treffen Mauer. In diesen Bildern ist Grau eine Wand, Weiß ist der Boden und die violette Linie ist die Mindestlänge von Anfang bis Ende, und die schwarzen Linien und grauen Punkte repräsentieren mögliche Pfade.
Hier sind einige schlechte Beispiele für zufällig generierte Diagramme:
Hier sind einige gute Beispiele für zufällig generierte (oder von Hand optimierte) Diagramme:
Ich habe auch bemerkt, dass die schwierigeren, wenn ich dies tatsächlich als Puzzle spiele, diejenigen sind, die viele hochgradige Knoten entlang des minimalen Pfades haben.