Jakie są dobre zasoby dotyczące generowania treści proceduralnych w kontekście generowania lochów?
Najbliższym artykułem, jaki udało mi się znaleźć, był Algorytm generowania labiryntu 2D , co nie jest dokładnie tym, czego szukam. Funkcje, takie jak pokoje i połączone korytarze, są idealne.
Dzięki!
procedural-generation
Gabriel Isenberg
źródło
źródło
Odpowiedzi:
To było mniej więcej odpowiedzią wcześniej. Twoje pierwsze miejsce zatrzymania powinno być http://pcg.wikidot.com/
Skoro zostałem oskarżony o to, że wcale nie jest pomocną odpowiedzią (naprawdę? Ktoś prosi o zasoby i zamieszczam link do wiki zajmującej się tym tematem? ), ta strona wiki dotyczy konkretnie generatorów lochów i zawiera linki do różnych artykułów na ten temat.
http://pcg.wikidot.com/pcg-alameterm:dungeon-generation
Nadal zalecam przeglądanie całej wiki, ponieważ generowanie treści proceduralnych jest po prostu bardzo kreatywnym podejściem i wszelkie pomysły są prawidłowe. To wyzwanie dla myślenia lateralnego - i zabawne.
źródło
Udało mi się uzyskać dość dobrze wyglądające poziomy, używając następującego algorytmu opartego na kwadratowej siatce:
Najpierw utwórz zestaw pokoi. Losowe parametry określają wielkość pokoi i ich liczbę. Algorytm adaptacyjny mógłby nawet zdefiniować niektóre strefy wykonane z dużych korytarzy, a inne bardzo małych pomieszczeń.
Następnie musisz upewnić się, że wszystkie pokoje są ze sobą połączone. W tym celu uruchom wizjer, aby wykopać korytarze (powiedzmy A *) pomiędzy każdą parą pokoi, nadając losowo wybraną wagę istniejącym przestrzeniom (pokojom lub innym korytarzom) w porównaniu z przestrzenią jeszcze nie rzeźbioną (ściany). Jeśli różnica w wadze jest niewielka, to kopanie nowych korytarzy będzie stosunkowo tanie, a algorytm wykona wiele korytarzy między pokojami, z wieloma możliwościami przejścia z jednego miejsca do drugiego. Jeśli różnica w wadze jest wysoka, algorytm będzie preferował przechodzenie przez istniejące pokoje i korytarze, co sprawi, że ścieżki będą bardziej kręte i będzie mniej możliwości dotarcia do określonego miejsca docelowego.
Pozwala to, na podstawie niewielkiej liczby parametrów, tworzyć bardzo różne poziomy wyglądu, od rzadkich, masywnych hal z małymi korytarzami łączącymi je do labiryntu przypominającego ul, labiryntu ściśle połączonych komór.
Oto przykład wygenerowanego poziomu.
W oparciu o ten algorytm możesz dodać dekorację ścienną zależną od strefy, zmniejszyć lub powiększyć korytarze, stworzyć specjalne pokoje i tak dalej.
źródło
Jeśli lubisz czytać kod i potrafisz analizować C #, czy mogę zasugerować generator lochów, którego używa mój roguelike Amaranth? To tutaj . Obsługuje połączone pokoje, rozszerzalne funkcje i inne fajne rzeczy.
Jeśli zburzysz i zbudujesz cały projekt, istnieje niezależne narzędzie, które wygeneruje i narysuje lochy, abyś mógł go ulepszyć i zobaczyć, jak to działa.
źródło
Wszystko to świetne pomysły. Wziąłem trochę z RogueBasin i pcg.wikidot.com i napisałem własną implementację w języku C #.
Naprawdę podobał mi się „naturalny” wygląd poziomów przypominających jaskinie, które można wygenerować za pomocą metody automatów komórkowych. Aby zrozumieć, co mam na myśli przez metodę automatów komórkowych, wyobraź sobie grę życia Conwaya. Mój kod używa tak zwanej metody 4-5, co oznacza, że płytka stanie się ścianą, jeśli jest to ściana, a 4 lub więcej z jej dziewięciu sąsiadów jest ścianami, lub jeśli nie jest to ściana, a 5 lub więcej sąsiadów jest ścianami. Zaczynam od wypełnienia mapy losowo ścianami lub spacją, następnie iteracyjnie odwiedzam każdą pozycję x / y i stosuję zasadę 4-5. Aby pomóc w rozwiązaniu problemu z tworzeniem izolowanych jaskiń, po losowym wypełnieniu mapy, pustą poziomą linię na mapie, ustawiając każdy kafelek na pole zamiast ściany, przed zastosowaniem reguły 4-5 do każdego kafelka.
Możesz wyświetlić kod mojej klasy modułu obsługi map i wszelkie ulepszenia, które wprowadzę tutaj
lub zarchiwizowana wersja tutaj .
źródło
Myślę, że najbardziej bezpośrednim miejscem do znalezienia tego jest sprawdzenie kodu źródłowego. Dwóch głównych graczy w tej dziedzinie, Angband i Nethack, są open source.
źródło