Generator powinien realizować zamysł projektowy
Losowe rozmieszczenie ścian nie tworzy automatycznie ciekawego poziomu. Najpierw określ, co ma się wydarzyć: bezpieczny start, wybór drogi, odkrycie zasobu i osiągnięcie celu. Dopiero potem wybierz miejsca, w których losowość ma dawać różnorodność. W przykładowej grze z kluczem i drzwiami klucz nie może pojawić się za zamkiem, który sam otwiera. To zależność logiczna, której nie rozwiąże samo zwiększenie rozmiaru mapy.
Zapisz niezmienniki: dostępne wejście, przynajmniej jedna droga do celu, limit przeciwników przy starcie i miejsce potrzebne do wykonania ruchu. Oddziel je od preferencji, takich jak liczba bocznych pomieszczeń. Niezmiennik musi być spełniony, preferencję można oceniać stopniowo. Takie rozdzielenie ułatwia diagnozę: wiadomo, czy mapa jest niedopuszczalna, czy po prostu mniej interesująca niż zakładano. Nie oceniaj generatora wyłącznie po kilku ładnych zrzutach.
Ziarno pozwala powtórzyć ciąg przy tych samych warunkach
Generator pseudolosowy z ustalonym ziarnem może odtworzyć ten sam ciąg dla tego samego algorytmu i sposobu użycia. Do zgłoszenia błędu zapisuj jednak także wersję generatora oraz parametry. Zmiana kolejności losowań lub biblioteki może zmienić wynik mimo identycznego ziarna. Sam numer nie jest więc wieczystym formatem zapisu poziomu. Gdy potrzebujesz zachować konkretną mapę po aktualizacji gry, rozważ zapis jej struktury albo wersjonowany mechanizm odtwarzania.
Oddziel losowanie układu od dekoracji, łupów i efektów wizualnych. Dodanie nowej iskry nie powinno przesunąć sekwencji losowań odpowiedzialnej za lokalizację wyjścia. Niezależne strumienie ułatwiają rozwój i testowanie. Ustal, które elementy mają być stałe dla danego ziarna, a które mogą różnić się między sesjami. Dzięki temu porównanie dwóch poziomów pozostaje sensowne i nie trzeba zgadywać, dlaczego drobna zmiana grafiki przebudowała cały świat.
Najpierw szkielet przejścia, potem szczegóły
Jednym z możliwych podejść jest stworzenie połączeń między głównymi obszarami, a dopiero później wypełnienie ich przeszkodami. Inne projekty zaczynają od gotowych modułów z kontrolowanymi wejściami. Wybór zależy od mechaniki: platformówka wymaga oceny skoków, a gra poruszająca się po siatce może opierać się na sąsiedztwie pól. Nie przenoś testu przechodniości z jednego rodzaju gry do drugiego bez sprawdzenia, co rzeczywiście potrafi bohater.
W przykładzie z pokojami zapisz graf połączeń, warunki wejścia i dostępne zasoby. Losowanie szczegółów nie może zniszczyć wcześniej zapewnionej drogi. Dekoracyjna skrzynia z włączoną kolizją potrafi przypadkowo zablokować jedyny korytarz. Dlatego końcowa walidacja powinna działać na rzeczywiście używanej mapie kolizji, a nie wyłącznie na abstrakcyjnym szkielecie. Związek między projektem a fizycznym poziomem musi zostać sprawdzony po dodaniu wszystkich elementów.
Walidacja powinna znać możliwości gracza
Proste sprawdzenie połączenia pól nie wystarczy, jeśli przejście wymaga klucza, skoku lub zasobu zużywanego po drodze. Zdefiniuj stan istotny dla osiągalności: pozycję, posiadane narzędzia i odblokowane przejścia. Nie każda gra potrzebuje pełnego automatycznego rozwiązania, ale każda powinna sprawdzać swoje najważniejsze ograniczenia. Dla małego projektu można ograniczyć liczbę zależności, aby walidacja była wykonalna i zrozumiała.
Po wykryciu błędu generator może odrzucić mapę, naprawić określone połączenie lub użyć przygotowanego układu awaryjnego. Każda ścieżka wymaga limitu prób. Pętla „losuj aż zadziała” bez ograniczenia może zawiesić grę przy rzadkim zestawie parametrów. Zapisuj przyczynę odrzucenia i liczbę podejść. Jeśli większość kandydatów odpada z tego samego powodu, popraw reguły tworzenia zamiast tylko zwiększać limit, który wydłuży oczekiwanie na start.
Różnorodność mierz doświadczeniem, nie liczbą ziaren
Milion możliwych układów może oznaczać milion bardzo podobnych korytarzy. Określ cechy wpływające na decyzje: długość głównej drogi, liczbę skrótów, rozkład ryzyka i miejsca odpoczynku. Porównuj ich rozkład dla większej próbki, nie pojedynczego wyniku. Nie wszystkie poziomy muszą być równie trudne, ale zakres powinien odpowiadać etapowi gry. Przypadkowo ekstremalna mapa na początku może zostać odebrana jako niesprawiedliwa, nie jako interesująca różnorodność.
Połącz testy automatyczne z rozgrywką ludzi. Maszyna potrafi potwierdzić istnienie drogi, lecz niekoniecznie jej czytelność i przyjemność. Obserwuj, czy gracz rozpoznaje cel i rozumie, dlaczego wybiera dany korytarz. Zapisuj ziarno przy ważnych zdarzeniach testowych. Dzięki temu można wrócić do problematycznej sytuacji, zmienić jedną regułę i porównać rezultat, zamiast za każdym razem oceniać zupełnie inny układ wygenerowany przypadkiem.
Generator wymaga wersjonowania i ograniczenia kosztu
Generowanie większego świata może blokować start lub powodować zacięcie podczas przechodzenia między obszarami. Zmierz koszt etapów i zdecyduj, co można przygotować wcześniej. Przy zadaniu w tle kontroluj przekazywanie wyniku oraz możliwość anulowania, gdy gracz zmieni tryb. Nie pozwól, aby spóźniona mapa zastąpiła nowszą sesję. Wynik powinien być powiązany z identyfikatorem żądania i parametrami, dla których został utworzony.
Do testów regresji zachowaj zestaw ziaren obejmujący typowe i trudne przypadki. Dodaj skrajne rozmiary mapy, małą liczbę pomieszczeń i maksymalną liczbę przeszkód. Po każdej zmianie sprawdź niezmienniki oraz czas wykonania. Odbiór generatora nie kończy się na stwierdzeniu, że „każda mapa jest inna”. Potrzebujesz powtarzalności, kontroli osiągalności i różnorodnych decyzji gracza. Dopiero te cechy zmieniają losowanie w użyteczne narzędzie projektowania poziomów.
