Zaprojektowałem algorytm jakiś czas temu dla labiryntów 2D na kwadratowej siatce, nie ma powodu, dla którego to nie powinno działać również dla labiryntu 3D na sześciennej siatce.
Zacznij od siatki 3D początkowo w pełni wypełnionej komórkami ścian.
...
start środek na krawędzi rusztu, środek porusza się po linii prostej w kierunku X, Y, Z, X, Y lub -Z kierunku polana ściany, gdy przemieszcza .
Akcja "N" ma niewielką szansę na wystąpienie każdego kroku.
Akcja "M" występuje, gdy komórka znajdująca się bezpośrednio przed agentem jest ścianą, a komórka przed nią jest pusta.
„N” jest losowy wybór:
- usunięcie tego środka
- obracając w lewo lub prawo o 90 stopni
- i tworzenie agentem na tym samym placu obrócił o 90 stopni w lewo, w prawo lub w obu (dwóch agentów).
'M' jest przypadkowy dobór:
- usunięcie tego środka
- usunięciu ściany naprzeciwko tego środka, a następnie usunięcia tego środka
- i nic nie robiąc, niosąc ze sobą 90 ° w lewo lub w prawo.
- i utworzenie agenta na tym samym polu przekreślonym o 90 stopni w lewo, w prawo lub w obu (dwa agenty).
labirynty są charakterystyczne, a ich charakter i jest bardzo elastyczna, regulując spust „M” (związek z ważnych węzłów) i również dostosowanie szanse od 1 do 8 miejsce. Możesz usunąć akcję lub dwie lub wprowadzić własne działania, na przykład jedną, aby wykonać małą czyszczenie lub pominąć jeden krok.
Spustem dla "N" może być również inny rodzaj przypadkowości, na przykład poniższy przykład może być użyty do stworzenia dość rozłożystych labiryntów, które wciąż mają długie, proste części.
float n = 1;
while (random_0_to_1 > 0.15)
{
n *= 1.2;
}
return (int)n;
jakieś małe korekty będą potrzebne od mojego prosty opis, na przykład wyzwalacz działania „M” będą musiały sprawdzić komórek przylegających do komórek sprawdza, jak również w zależności od jakiego rodzaju skrzyżowaniach są pożądany.
Albo 5 albo 6 są potrzebne, aby labirynt zawierał cykle, a przynajmniej jedno alternatywne działanie "M" do 5 i 6 jest wymagane, aby labirynt zawierał ślepe zaułki.
Niektóre wybory szans/akcji i wyzwalaczy typu "M" będą powodowały, że labirynty nie działają, na przykład są nierozwiązywalne lub pełne pustych lub ścianek komórek, ale wiele z nich będzie dawało niezmiennie dobre wyniki.
Czy chcesz taki, który rozwiązuje labirynt lub generuje labirynt? –
@ X-Zero Generuje. – jmasterx
można stworzyć labirynt 2d na siatce, a aby go 3d każda komórka siatki byłaby zamiast tego pudełkiem z "wysokością" – danca