Programuję grę opartą na kafelkach i mam kilka podstawowych kafelków (trawa, brud itp.), Ale nie mogę wymyślić, jak zrobić dobre losowe generowanie map, ponieważ kiedy dokonam naprawdę losowego wyboru, jeśli kafelek powinna być trawa / brud, dostaję to:
Rozumiem, dlaczego tak się dzieje, ale chcę stworzyć losowe ciągłe obszary trawy lub ziemi. Coś, co miałoby sens, na przykład:
Odpowiedzi:
Co możesz zrobić, to losowo wygenerować mapę Voronoi w następujący sposób:
center points
(patrz czarne kropki) i losowo decyduj, czy to trawa, czy brud.center point
ziemi lub brudu.Jeśli to, co zrobiłeś wcześniej, to „przerzucenie monety” dla każdego kafelka (szum), wygenerowanie diagramu Voronoi zapewni znacznie lepszy wynik.
Możesz to poprawić, dzieląc
center points
naislands
algorytm, który:centers points
i określa je jakoleaders
.źródło
center points
. Następnie zdecyduj, czy są to trawa, czy brud. Teraz przesuń pętlę nad tablicą i zdecyduj, czy każda płytka znajduje się najbliżej punktu brudu lub trawy. Może powiedz mi, która część stanowi wyzwanie?Można użyć szumu perlina, który jest zwykle używany do generowania mapy wysokości. Hałas Perlina w grach
Następnie możesz użyć wysokości jako doradcy, jak duża jest szansa na pojawienie się trawy / brudu w jednym regionie mapy.
Przykład (wartości hałasu Perlina od 0-256): Jeśli wartość przekracza 200, prawdopodobieństwo umieszczenia trawy wynosi 80% (brud 20%). Jeśli wartość wynosi od 100 do 200, prawdopodobieństwo umieszczenia trawy wynosi 50% (zabrudzenie również 50%). Jeśli wartość jest mniejsza niż 100, prawdopodobieństwo umieszczenia trawy wynosi 20% (brud 80%).
źródło
http://gamedevelopment.tutsplus.com/tutorials/generate-random-cave-levels-using-cellular-automata--gamedev-9664
oto moja wersja metody automatów komórkowych zacznij od losowego wypełnienia siatki, a następnie uruchom na niej te reguły automatów kulistych
i ostatecznie wygląda jak jaskinia
indeks można przekonwertować na pozycję x i y za pomocą tego kodu
po prostu zwracam listę booli, ponieważ używam tej listy do wielu rzeczy: jaskiń, drzew, kwiatów, trawy, mgły, wody możesz tutaj nawet łączyć wiele list na różne sposoby tutaj najpierw usuwam wszystkie mniejsze jaskinie, a następnie łączę dwie losowe listy
źródło
Wybierz punkt na mapie. Umieść żądany typ płytki o wartości bazowej, takiej jak 40. Śledź miejsce, w którym umieściłeś nowy pożądany kafelek. Dodaj punkt początkowy do listy.
Dla każdego punktu na tej liście odwiedzasz wszystkich sąsiadów. Gdy masz już dość mocy (od 40), dodaj żądany kafelek i dodaj go do listy, którą chcesz odwiedzić. Daj nowy kafelek mniej mocy, określonej przez ciebie. Najłatwiejszy = losowe opuszczanie. Po odwiedzeniu kafelka z listy usuń go. Zacznij od nowa, odwiedzając wszystkie nie odwiedzone, ale utworzone kafelki.
źródło