Algorytm generowania labiryntu 2d [zamknięty]


27

Jakiego algorytmu używałeś w przeszłości do generowania prostego labiryntu 2D?

Odpowiedzi:



8

Wolę ciasno zwinięte labirynty, które tworzy Algorytm Kruskala.

Standardowy opis algorytmu Kruskala jest nieodpowiedni, ponieważ nie rozróżnia on lokalizacji na wykresie od grup lokalizacji, opierając się na grze słów o wyborze struktury danych, co prowadzi do dwuznaczności opisu, które dezorientują nowicjuszy. Dlatego odrzucam terminologię Kruskala.

Użyję następujących terminów:

  • Wykres
    • sam labirynt.
  • Węzeł
    • lokalizacja w labiryncie. W kwadratowym labiryncie jest to kwadratowa komórka.
  • Brzeg
    • połączenie między dwoma węzłami. W kwadratowym labiryncie jest to pasek o długości 1.
  • Grupa drzew
    • zestaw węzłów, które mogą być puste, ułożone w formie drzewa

Z nich otrzymujemy:

  1. Utwórz grupę GTG dla Graph Tree Group , zawierającą grupy drzew
  2. Wypełnij GTG jedną grupą drzew zawierającą jeden węzeł dla każdej lokalizacji w labiryncie
  3. Utwórz zestaw krawędzi E
  4. Wypełnij E każdą ważną krawędzią w swoim labiryncie
  5. Podczas gdy w GTG jest więcej niż jedna grupa i podczas gdy E nie jest puste:
  6. Wybierz losową krawędź rE z E
  7. Zidentyfikowanie punktów końcowych P1 i P2 z rE
  8. Usuń RE z E.
  9. Sprawdź, do których grup należą p1 i p2 (odpowiednio p1g i p2g ).
  10. Jeśli p1g i p2g są różne, dołącz do grupy drzew p1g i p2g w p1 -> p2 i przepisz całą własność grupy jednego drzewa do drugiego, łącząc w ten sposób drzewa.
  11. Wróć do kroku 5.
  12. Jeśli nie masz żadnych krawędzi, ale więcej niż jedno drzewo, wykres nie jest połączony lub występuje błąd.
  13. Jeśli masz tylko jedno drzewo, masz kompletny labirynt bez pętli.

1
Mieliśmy projekt GUI i musieliśmy zbudować losowy labirynt 2D na GUI. Właśnie tak to zrobiłem i nigdy nie zdawałem sobie sprawy, że używam Kruskals lol. Zdecydowanie zdałem sobie sprawę, że użyłem wykresu.
Bryan Harrington


1

Jednym prostym sposobem jest sporządzenie listy ścian północnych i zachodnich, a następnie ich permutację. Nadaj każdemu pokojowi numer. Następnie wysadź jedną ze ścian na liście, o ile dwa pokoje nie mają tego samego numeru, a następnie propaguj jeden z numerów do wszystkich innych pokoi o tym samym numerze. Idź dalej, aż zabraknie ci ścian. Działa to w przypadku prostokątnych labiryntów lub, w rzeczywistości, każdego innego labiryntu, w którym można podać listę „potencjalnie połączonych pokoi”. Ponadto programowanie jest dość proste.


1

Przyjrzałbym się również niektórym algorytmom używanym w rozwoju Roguelike. W Rogue Basin jest dobry zasób początkowy



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.