🏰 Proceduralny generator lochów
Generuj poziomy gier na trzy sposoby: podział BSP z komnatami i korytarzami, losowe rozmieszczenie komnat z drzewem rozpinającym korytarzy L, albo jaskinie z automatu komórkowego. Ziarno losowe zapewnia powtarzalność.
O tej symulacji
Ta symulacja buduje mapę poziomu gry na bieżąco, wykorzystując trzy przełączalne algorytmy: Binary Space Partitioning (BSP), który rekurencyjnie dzieli mapę i umieszcza komnatę w każdym liściu; generator losowych komnat, który rozrzuca niepokrywające się prostokąty i łączy je wzdłuż łańcucha rozpinającego najbliższego sąsiada; oraz jaskinię z automatu komórkowego, która zaczyna od losowego szumu i wygładza go klasyczną regułą 4-5. Generator LCG (liniowy generator kongruentny) z ziarnem steruje każdym losowym wyborem, więc to samo ziarno zawsze odtwarza dokładnie tę samą mapę.
🔬 Co pokazuje
Loch oparty na siatce renderowany na płótnie, gdzie kafelki są kolorowane według typu: ciemny dla ścian, zielonkawy dla podłóg komnat, niebiesko-szary dla korytarzy i szary dla organicznej podłogi jaskini. Po wygenerowaniu podwójne przeszukiwanie wszerz znajduje dwa najbardziej odległe kafelki podłogi (oznaczone na zielono jako start, na czerwono jako wyjście) i podaje długość najdłuższej ścieżki oraz jaki procent kafelków podłogi jest osiągalny ze startu — bezpośrednią miarę łączności mapy.
🎮 Jak korzystać
Przełączaj między BSP, Rooms i Cave za pomocą przycisków algorytmu. Reguluj rozmiar mapy (24–80 kafelków na bok), docelową liczbę komnat oraz min/maks rozmiar komnaty dla BSP i Rooms; dla Cave kontroluj początkowy procent wypełnienia i liczbę przebiegów wygładzania. Wpisz liczbowe ziarno lub kliknij „New seed”, by odkrywać różne układy, i przełącz nakładkę struktury, by zobaczyć linie podziału BSP i obrysy komnat.
💡 Czy wiesz, że?
Reguła automatu komórkowego jaskini użyta tutaj — kafelek staje się ścianą, jeśli 5 lub więcej z jego 8 sąsiadów to ściany, w przeciwnym razie podłogą — to ta sama „reguła 4-5” spopularyzowana do generowania jaskiń w roguelike'ach, ponieważ garść przebiegów wygładzania niezawodnie zamienia losowy szum w połączone, organicznie wyglądające jaskinie bez żadnej logiki wyszukiwania ścieżek.
Najczęściej zadawane pytania
Czym jest generowanie lochów metodą Binary Space Partitioning (BSP)?
Generowanie BSP rekurencyjnie dzieli prostokątny obszar na dwa mniejsze prostokąty, na przemian stosując cięcia poziome i pionowe, aż każdy region będzie wystarczająco mały, by pomieścić jedną komnatę. Komnata jest następnie umieszczana wewnątrz każdego węzła liścia, a komnaty są łączone prostymi lub L-kształtnymi korytarzami zgodnie z kolejnością ich utworzenia. Daje to lochy o naturalnej, drzewiastej strukturze i niewielu nakładających się komnatach, a technika ta jest jedną z najczęściej stosowanych w roguelike'ach, ponieważ gwarantuje niepokrywające się komnaty bez sprawdzania kolizji.
Jak algorytm losowych komnat unika ich nakładania się?
Generator wielokrotnie proponuje komnatę o losowej szerokości i wysokości w losowej pozycji, a następnie sprawdza ją względem każdej wcześniej umieszczonej komnaty, wykorzystując nakładanie się prostokątów osi zgodnych (z jednokafelkowym buforem). Jeśli nakłada się na istniejącą komnatę, próba jest odrzucana i podejmowana jest nowa, aż do ograniczonej liczby prób. Gdy istnieje wystarczająco dużo niepokrywających się komnat, są one łączone zachłannym łańcuchem najbliższego sąsiada — na każdym kroku najbliższa jeszcze niepołączona komnata jest dołączana do rosnącej sieci L-kształtnym korytarzem, podobnie w duchu do budowania minimalnego drzewa rozpinającego.
Jaka reguła automatu komórkowego jest używana w algorytmie jaskiń?
Jaskinia zaczyna jako siatka losowo wypełniona ścianami w wybranym procencie (35–60%). Jest następnie wygładzana przez kilka przebiegów: w każdym przebiegu każdy kafelek liczy, ile z jego 8 otaczających sąsiadów to ściany, i sam staje się ścianą, jeśli 5 lub więcej sąsiadów to ściany, w przeciwnym razie staje się podłogą. Powtarzanie tego kilka razy usuwa izolowany szum i przekształca małe skupiska ścian w gładkie, organiczne ściany jaskiń — ta sama zasada stoi za grą w życie Conwaya, zastosowaną tutaj do generowania poziomów zamiast symulowania żywych komórek.
Jak generator liczb losowych z ziarnem czyni mapy powtarzalnymi?
Symulacja używa liniowego generatora kongruentnego (LCG): prostego wzoru, który wielokrotnie przekształca wewnętrzny 32-bitowy stan za pomocą mnożenia i dodawania ze stałymi współczynnikami, produkując deterministyczny strumień liczb pseudolosowych. Ponieważ generator jest resetowany do tej samej wartości ziarna za każdym razem, gdy naciśnięty zostaje przycisk „Generate”, wpisanie tego samego ziarna z tym samym algorytmem i parametrami zawsze produkuje identyczny układ lochu, dlatego pole ziarna i przycisk „New seed” pozwalają zapisać lub odtworzyć konkretną mapę.
Co oznaczają statystyki łączności i najdłuższej ścieżki?
Po wygenerowaniu lochu symulacja uruchamia przeszukiwanie wszerz (BFS) od jednego kafelka podłogi, by znaleźć najdalej osiągalny kafelek, a następnie uruchamia drugie BFS z tego kafelka, by znaleźć rzeczywistą średnicę połączonego regionu — to klasyczna technika „podwójnego BFS” do znajdowania najdłuższej najkrótszej ścieżki w nieważonym grafie. Dwa punkty końcowe stają się znacznikami startu i wyjścia, długość ścieżki między nimi jest pokazywana jako „Longest path”, a „Connectivity” pokazuje, jaki procent wszystkich kafelków podłogi jest osiągalny ze startu, co sygnalizuje, czy jaskinia lub loch ma izolowane, nieosiągalne kieszenie.
Generuj poziomy gier na trzy sposoby: podział BSP z komnatami i korytarzami, losowe rozmieszczenie komnat z drzewem rozpinającym korytarzy L, albo jaskinie z automatu komórkowego. Ziarno losowe zapewnia powtarzalność.
3D · Three.js / WebGL renderer · 60 FPS target · runs fully client-side, no install