Dzisiaj wygenerujemy mapę dla gry RPG typu roguelike!
Przykładowa mapa:
##########
#### F#
#### ##
## C#C#
# ## #
# C #E #
#### # #
# #
#P #
##########
#
są ściany, P
to miejsce początkowe gracza, F
koniec, który należy osiągnąć, C
to monety, które można zbierać, i E
wrogowie, z którymi można walczyć.
Specyfikacja mapy:
- Wysokość i szerokość powinny zawierać się między 10 a 39 włącznie. Wysokość nie musi być równa szerokości.
- Granice map powinny być wypełnione ścianami.
P
należy umieścić w lewym dolnym rogu.F
należy umieścić w prawym górnym rogu.- Powinno być od 1 do 3 wrogów.
- Powinno być od 2 do 4 monet.
- Na środku powinna znajdować się pewna ilość ścian. Nie powinno być droga, aby uzyskać od
P
każdemuC
,E
iF
pamiętając, że gracz nie może poruszać się po przekątnej. - Każda możliwa kombinacja powinna mieć szansę na wystąpienie.
Zasady
- Program z najmniejszą liczbą bajtów wygrywa.
- Twój program nie powinien pobierać żadnych danych wejściowych.
- Twój program może nie zostać zakończony z błędem (wyjście niekrytyczne
STDERR
jest w porządku, ale nie możemy mieć podobnej awarii po wygenerowaniu mapy!) - Pojedynczy znak nowej linii jest dozwolony, a końcowe miejsce jest dozwolone.
- Żadne inne dane wyjściowe nie są dozwolone.
code-golf
ascii-art
path-finding
maze
Pavel
źródło
źródło
Odpowiedzi:
Perl, 293 bajtów
-9 bajtów dzięki @Dom Hastings
Dodaj
-E
flagę, aby go uruchomić:Jednak uruchomienie zajmuje dużo czasu, więc zamiast tego zalecamy użycie tej wersji:
Wypróbuj online!
Wyjaśnienie
Uruchomienie zajmuje dużo czasu, ponieważ lista, z której losowo wybieramy postacie do umieszczenia na planszy (
@a
), zawiera 1369 białych znaków#
i tylko 4 monety i 3 wrogów. Więc jeśli rozmiar szerokości i wysokości jest niewielki, istnieje wiele miejsc w#
porównaniu z monetą i wrogami, więc jest całkiem prawdopodobne, że losowa mapa nie będzie ważna. Dlatego „zoptymalizowane” wersja jest szybsza: lista, z której możemy odebrać znaków jest tylko trochę większa niż mapie (lista jest@a=((C)x4,(E)x3,("#")x($v=rand $=*$%),($")x($=*$%-$v))
: liczba losowa$v
z#
(gorszy od wielkości mapy) isize of the map - $v
spacji).źródło
$"
jest prawidłową zmienną Perla, ale wyróżnianie składni nie wie o tym, dlatego tak to wygląda. Ok, usunę komentarz o niedostępnych miejscach.PHP,
422417415309373369364361 bajtówdziała na łańcuchach bez podziałów linii; wykopuje losowe ścieżki między dodatkami. Uruchom z
-r
.Uwaga: Ścieżki są tworzone przez chodzenie w losowych kierunkach. Wybór kierunku dla każdego kroku generuje najczęściej mapy, które są szeroko otwarte; i bardzo mało prawdopodobne jest wyświetlenie przykładowej mapy; ale jest to możliwe.
awaria
źródło
<?php .... ?>
E
s.C # (interaktywny kompilator Visual C #) , 730 bajtów
Wypróbuj online!
Nie golfowany:
Edycja: zapisano 8 bajtów, dzięki czemu było nieco mniej wydajne, blokując dostępną pętlę testową odtwarzacza do 99 iteracji. Wiem, że tak naprawdę nigdy nie będzie konkurować z innymi odpowiedziami tutaj, ale dobrze się bawię!
źródło