W piątej edycji Dungeons & Dragons (a także w większości innych wydań) istnieje magiczny przedmiot o nazwie Deck of Many Things . Jest to niezwykle potężny przedmiot, ponieważ wszystkie karty mają bardzo silne pozytywne lub negatywne efekty. Aby użyć talii, postać deklaruje liczbę, a następnie dobiera ją do tej liczby kart, z efektami stosowanymi kolejno. Jeśli postać nie losuje wszystkich zadeklarowanych kart, a minęła co najmniej 1 godzina od wyciągnięcia ostatniej karty, reszta kart losowana jest automatycznie i stosowane są efekty. Po losowaniu każdej karty jest ona zwracana do talii, a talia jest tasowana.
Poniżej znajduje się lista efektów losowania każdej karty 1 :
- Równowaga : Twój umysł cierpi z powodu gwałtownej zmiany, która powoduje zmianę twojego wyrównania. Zgodny z prawem staje się chaotyczny, dobro staje się złem i odwrotnie. Jeśli jesteś naprawdę neutralny lub niezrównany, ta karta nie ma na ciebie wpływu.
- Kometa : Jeśli w pojedynkę pokonasz kolejnego wrogiego potwora lub grupę potworów, które spotkasz, zdobędziesz punkty doświadczenia wystarczające, aby uzyskać jeden poziom. W przeciwnym razie ta karta nie ma wpływu.
- Donjon : Znikasz i zostajesz pochowany w stanie zawieszonej animacji w sferze poza wymiarami. Wszystko, co nosiłeś i nosiłeś, pozostaje w miejscu, które zajmowałeś po zniknięciu. Pozostajesz uwięziony, dopóki nie zostaniesz znaleziony i usunięty z kuli. Nie możesz zostać zlokalizowany żadną magią wróżbiarstwa, ale zaklęcie życzeń może ujawnić lokalizację twojego więzienia. Nie dobierasz więcej kart.
- Euryale . Wizualnie podobny do karty wizerunek przeklina cię. Otrzymujesz karę -2 za rzuty obronne, będąc przeklętym w ten sposób. Tylko bóg lub magia karty Losu może zakończyć tę klątwę.
- The Fates : Rzeczywistość rozplątuje się i obraca na nowo, pozwalając uniknąć lub usunąć jedno zdarzenie, jakby nigdy się nie wydarzyło. Możesz użyć magii karty natychmiast po jej wyciągnięciu lub w dowolnym innym momencie przed śmiercią.
- Płomienie : potężny diabeł staje się twoim wrogiem. Diabeł szuka twojej ruiny i nęka twoje życie, delektując się cierpieniem, zanim spróbuje cię zabić. Ta wrogość trwa aż do śmierci albo ciebie, albo diabła.
- Głupiec : Tracisz 10 000 XP, odrzucasz tę kartę i ponownie dobierasz z talii, licząc oba losowania jako jedną z zadeklarowanych. Jeśli utrata tak dużej liczby punktów doświadczenia spowoduje utratę poziomu, zamiast tego stracisz kwotę, która pozostawi wystarczającą liczbę punktów doświadczenia, aby utrzymać poziom.
- Klejnot : u twoich stóp pojawia się dwadzieścia pięć sztuk biżuterii o wartości 2000 gp każdy lub pięćdziesiąt klejnotów o wartości 1000 gp każdy.
- Idiota : Trwale zmniejsz swoją Inteligencję o 1d4 + 1 (do minimalnego wyniku 1). Możesz wyciągnąć jedną dodatkową kartę poza deklarowanymi losowaniami.
- Jester : Zyskujesz 10 000 XP lub możesz dobrać dwie dodatkowe karty poza zadeklarowanymi losowaniami. Odrzuć tę kartę po jej wyciągnięciu.
- Klucz : rzadka lub rzadsza magiczna broń, z którą jesteś biegły, pojawia się w twoich rękach. MG wybiera broń.
- Rycerz : Zyskujesz obsługę myśliwca 4. poziomu, który pojawia się w wybranym przez Ciebie polu w promieniu 30 stóp od ciebie. Wojownik należy do tej samej rasy co ty i służy ci lojalnie aż do śmierci, wierząc, że los przyciągnął go do ciebie. Kontrolujesz tę postać.
- Księżyc : Masz możliwość rzucenia zaklęcia życzeń 1d3 razy.
- Łotrzyk : Postać nieplayer wybrana przez GM staje się wroga wobec ciebie. Tożsamość twojego nowego wroga nie jest znana, dopóki NPC lub ktoś inny go nie ujawni. Nic innego jak zaklęcie życzeń lub boska interwencja nie może zakończyć wrogości NPC wobec ciebie.
- Zniszczenie : wszystkie formy bogactwa, które nosisz lub posiadasz, inne niż przedmioty magiczne, zostają utracone. Przenośne nieruchomości znikają. Firmy, budynki i grunty, które posiadasz, giną w sposób, który w najmniejszym stopniu zmienia rzeczywistość. Znika również wszelka dokumentacja potwierdzająca, że powinieneś posiadać coś utraconego na tej karcie.
- Czaszka . Przywołujesz awatara śmierci - upiorny humanoidalny szkielet ubrany w poszarpaną czarną szatę i niosący widmową kosę. Pojawia się w przestrzeni wybranej przez GM w odległości 10 stóp od ciebie i atakuje cię, ostrzegając wszystkich innych, że musisz wygrać bitwę sam. Awatar walczy aż do śmierci lub spadnie do 0 punktów życia, po czym znika. Jeśli ktoś próbuje ci pomóc, pomocnik przywołuje własnego awatara śmierci. Stworzenia zabitego przez awatara śmierci nie można przywrócić do życia.
- Gwiazdka : Zwiększ jeden ze swoich wyników umiejętności o 2. Wynik może przekroczyć 20, ale nie może przekroczyć 24.
- Słońce : zyskujesz 50 000 XP, aw twoich rękach pojawia się cudowny przedmiot (który losowo określa MG).
- Szpony : Każdy magiczny przedmiot, który nosisz lub nosisz, rozpada się. Artefakty w twoim posiadaniu nie są niszczone, ale znikają.
- Tron : Zyskujesz biegłość w umiejętności Perswazji i podwajasz premię za biegłość w czekach wykonanych za pomocą tej umiejętności. Ponadto zyskujesz należną własność małej twierdzy gdzieś na świecie. Jednak twierdza jest obecnie w rękach potworów, które musisz wyczyścić, zanim będziesz mógł przejąć twierdzę jako swoją.
- Wezyr : W dowolnym momencie w ciągu jednego roku od wyciągnięcia tej karty możesz zadać pytanie podczas medytacji i otrzymać w myślach prawdziwą odpowiedź na to pytanie. Oprócz informacji, odpowiedź pomaga rozwiązać zagadkowy problem lub inny dylemat. Innymi słowy, wiedza zawiera mądrość, jak ją zastosować.
- Pustka : ta czarna karta oznacza katastrofę. Twoja dusza jest pobierana z twojego ciała i zawarta w obiekcie w miejscu wybranym przez GM. Jedna lub więcej potężnych istot strzeże tego miejsca. Podczas gdy twoja dusza jest uwięziona w ten sposób, twoje ciało jest obezwładnione. Zaklęcie życzeń nie może przywrócić twojej duszy, ale zaklęcie ujawnia położenie obiektu, który ją trzyma. Nie dobierasz więcej kart.
(opisy kart skopiowane z 5. edycji D&D SRD )
Niektórzy szczególnie głupi gracze losują dużą liczbę kart jednocześnie, mając nadzieję, że zdobędą przynajmniej jeden potężny dar, aby zrównoważyć szkodliwe karty. Jak można się spodziewać, często skutkuje to śmiercią lub niemożnością ciągnięcia kart.
Wyzwanie
Symuluj powtarzanie losowania z 22-kartowej talii wielu rzeczy , generując każdą wyciągniętą kartę, zatrzymując się tylko wtedy, gdy zostanie spełniony jeden z następujących warunków:
- Matryce znakowe (przez rysunek czaszki , rysunek lub 5 kart po ciągnieniu Flames czy Rogue , bez korzyści losów lub Księżyc aktywny 2 ).
- Postać nie jest w stanie dobrać większej liczby kart (poprzez efekty Donjona , Szponów , Pustki 3 lub obniżenia wyniku Inteligencji postaci do 3 lub niższej przez Idiota 4 ).
Zasady
- Wyrównanie postaci, poziom, XP i przedmioty inne niż talia nie mają znaczenia.
- Wynik Inteligencji postaci zaczyna się od 10.
- Nie ma maksymalnego limitu Inteligencji postaci ani jej pełnego wykorzystania życzeń .
- Wykorzystanie losów nie kumuluje się.
- Życzeniem czar ma szansę 1-w-3 powodując postać, aby nigdy nie być w stanie korzystać z życzeń znowu zaklęcia, oprócz zwykłej skutku. Jeśli tak się stanie, postać nie będzie już mogła użyć zaklęcia do zanegowania Płomieni , Łotra lub Czaszki - moc Losów jest ich jedyną ucieczką.
- Postać zawsze dokonuje następujących wyborów:
- Losy i Księżyc służą wyłącznie do wyrwania postaci z kłopotów z Czaszki , Płomieni i Łotra . Postać nigdy nie użyje ich do odwrócenia efektu Szponów lub życzenia zaklęcia których nie można ponownie rzucić, i nie może użyć ich do odwrócenia efektów Donjonu i Pustki . Postać natychmiast użyje jednego zaklęcia życzeń, aby zignorować efekty Czaszki , Płomieni lub Łotra po narysowaniu jednego z nich, i zawsze będzie to skuteczne. Postać zawsze użyje Losu przed użyciemżyczę .
- Postać zawsze wybiera losowanie większej liczby kart z efektami Idioty i Błazna (odpowiednio).
- Efekt Gwiazdy jest zawsze wykorzystywany do zwiększenia Inteligencji o 2, aby uniknąć konieczności przerywania losowania kart poprzez efekt Idioty .
- Przywołany przez Rycerza sojusznik NPC nie jest wystarczająco silny, aby uratować postać przed przedwczesną śmiercią.
- Jakikolwiek wzrost lub spadek do Inteligencji (poprzez Gwiazdy lub Idioty ) musi zostać odzwierciedlony w danych wyjściowych (albo poprzez odnotowanie zmiany (
+2
lub-(1d4+1)
), albo poprzez wyprowadzenie bieżącego wyniku Inteligencji po wystąpieniu efektu). - Wszelkie zmiany liczby wykorzystanych życzeń, które postać zgromadziła, muszą podobnie zostać odzwierciedlone w danych wyjściowych, w tym życzenie, które powoduje, że postać nie będzie mogła dłużej używać życzeń .
- Wszystkie losowe wybory pochodzą z jednolitych rozkładów dyskretnych.
- Możesz wybrać dowolny zestaw 22 różnych wyjść do wydrukowania dla wyciągniętych kart - nazwy kart nie muszą być używane.
- Możesz generować zmiany w Inteligencji, życzenie wykorzystywać i chcieć, że nie będą nadawać się do użycia w jakikolwiek spójny, jednoznaczny sposób, jaki wybierzesz.
- Postać może użyć życzenia lub mocy Losów, aby uniknąć śmierci, jeśli odpowiednia karta zostanie dobrana jako piąta po wylosowaniu Łotrzyk lub Płomień . Tylko, jeżeli życzenie jest bezużyteczne lub wszystkie z nich zostały użyte, a Losy nie zostały wylosowane na czas lub zostały już wykorzystane, postać umrze.
- Oszukać i Jester są odrzucane po ich wyciągnąć. Wszystkie pozostałe karty są natychmiast wracane do talii, a następnie tasuje się je.
- Jeśli istnieje wiele ładunków Łotrów i / lub Płomienia, aktywnych jest tylko jedno użycie Losów lub życzenie jest konieczne, aby rozproszyć je wszystkie.
- Losowanie wielu kart jednocześnie przez Błazna lub Błazna nie przesuwa licznika tur na Płomienie i / lub Łotr .
Przykłady
Każda linia reprezentuje sekwencję losowań. Zmiany w Inteligencji i zastosowania życzeń są pokazane przez bieżącą wartość w nawiasach. C
Obok życzeń użytku oznacza, że pragnienie nie może być już używane. A F
oznacza, że moc Losów została użyta, aby uniknąć śmierci. Dodatkowe komentarze podano w celach wyjaśniających, w formie komentarzy w stylu Pythona.
Void # Can't draw with your soul ripped out of your body.
Throne, Euryale, Rogue, Star (12), Donjon # Can't draw while in suspended animation.
Moon (3), Throne, Sun, Flames (2), Fool, Idiot (6), Flames (1 C), The Fates, Skull (F), Skull # Two uses of wish were used on the two Flames draws. The second use rendered the character unable to use wish again. The Fates was used on the first Skull. When the second Skull came up, there was no way for the character to save himself, so he died.
Idiot (5), Star (7), Idiot (3) # Too dumb to draw.
Sun, Star (12), Talons # Talons destroys the deck.
Fates, Throne, Moon (2), Fates, Skull (F), Skull # Fates doesn't stack
Fates, Flames, Euryale, Fates, Skull, Void
Flames, Comet, Euryale, Gem, Knight, Key # 5 draws after Flames, the hero dies
Rogue, Balance, Throne, Gem, Idiot (8), Vizier, Sun # 5 draws plus one extra from Idiot
Wdrożenie referencyjne
#!/usr/bin/env python3
import random
deck="""Sun
Moon
Star
Throne
Key
Knight
Void
Flames
Skull
Ruin
Euryale
Rogue
Jester
Vizier
Comet
Fates
Gem
Talons
Idiot
Donjon
Balance
Fool""".split()
random.shuffle(deck)
int_stat = 10
wish_uses = 0
wish_expired = False
fates = False
turn_count = None
while True:
card = deck.pop()
if card == "Fates":
if turn_count is None:
fates = True
print(card)
else:
turn_count = None
fates = False
print("{} (F)".format(card))
elif card == "Moon":
wish_uses += random.randint(1, 3)
if turn_count is None:
print("{} ({})".format(card, wish_uses))
else:
turn_count = None
wish_uses -= 1
print("{} ({}) ({})".format(card, wish_uses+1, wish_uses))
elif card in ["Flames", "Rogue"]:
if turn_count is None:
turn_count = 5
if fates:
fates = False
turn_count = None
print("{} (F)".format(card))
elif wish_uses > 0 and not wish_expired:
wish_uses -= 1
turn_count = None
wish_now_expired = random.choice([False, False, True])
print("{} ({}{})".format(card, wish_uses, " C" if wish_expired else ""))
wish_expired = wish_now_expired
else:
print("{}".format(card))
elif card == "Idiot":
int_stat -= random.randint(2, 5)
print("{} ({})".format(card, int_stat))
if turn_count is not None:
turn_count += 1
if int_stat <= 3:
break
elif card == "Star":
int_stat += 2
print("{} ({})".format(card, int_stat))
elif card == "Skull":
if fates:
fates = False
turn_count = None
print("{} (F)".format(card))
elif wish_uses > 0 and not wish_expired:
wish_uses -= 1
turn_count = None
wish_now_expired = random.choice([False, False, True])
print("{} ({}{})".format(card, wish_uses, " C" if wish_expired else ""))
wish_expired = wish_now_expired
else:
print(card)
break
elif card in ["Donjon", "Void", "Talons"]:
print(card)
break
elif card == "Fool":
print(card)
if turn_count is not None:
turn_count += 1
elif card == "Jester":
print(card)
if turn_count is not None:
turn_count += 2
else:
print(card)
if card not in ["Fool", "Jester"]:
deck.append(card)
random.shuffle(deck)
if turn_count is not None:
turn_count -= 1
if turn_count == 0:
break
[1]: Technicznie istnieją dwa warianty: jeden z 13 kartami i jeden z 22 kartami. Martwi nas tylko pełna wersja z 22 kartami.
[2]: Płomień i Łotrzyk zwykle nie zabijają postaci, ale zakłada się, że wrogi NPC znalazł i zabił głupią postać po tym, jak zdąży wyciągnąć jeszcze 5 kart. Widmo przywołane przez Czaszkę jest niezwykle trudne do walki i zakłada się, że postać nie wygrywa. Tylko boska / magiczna interwencja za pośrednictwem The Fates lub Moon może uratować głupią postać przed śmiercią dzięki tym 3 kartom.
[3]: Zakładamy, że przyjaciele postaci są wystarczająco sprytni, aby nie próbować ratować postaci i pozwolić jej na dobranie większej liczby kart.
[4]: Wynik Inteligencji wynoszący 3 jest mniej więcej równoważny dzikiemu zwierzęciu, które nie byłoby w stanie aktywnie wybrać karty do dobrania.
Odpowiedzi:
JavaScript (ES6), 379 bajtów
Bez golfa
Pokaż fragment kodu
Objaśnienie wyników
Zakres kart wynosi od 0 do 21 w następujący sposób:
Odwrócenie Skull, Flames lub Rogue poprzez The Fates jest oznaczone symbolem
0
.JavaScript (ES6), 792 bajty
Poprzednia wersja korzystająca z nazw kart, zanim dowiedziałam się, że dozwolone są 22 odrębne wyjścia.
Bez golfa
Pokaż fragment kodu
źródło
Kotlin , 1173 bajtów
To też można uruchomić. - Wypróbuj online!
Prawdopodobnie jest wiele błędów ... daj mi znać w komentarzach!
źródło
Fool
lubJester
.Java 8,
481480 bajtówPrzeniesiono implementację referencji Python3 w Javie, a następnie przełożyliśmy ją w golfa. Można zdecydowanie grać w golfa więcej, ale to tylko wstępna wersja, aby upewnić się, że wszystko zrobiłem poprawnie.
Jeśli ktoś zauważy jakiekolwiek błędy (
nie zaskoczyłoby mnie, gdyby były jakieśEDYCJA: Naprawiono już siedem lub osiem błędów, odkąd to opublikowałem ...), daj mi znać.Wyjścia kart:
Format wyjściowy pozostawionych życzeń, użytych życzeń, pozostawionych danych wywiadowczych i użytej flagi:
Wyjaśnienie:
Wypróbuj tutaj lub Wypróbuj tutaj z ładnym wydrukiem .
źródło
Jester; Fates; Ruin; Euryale; Gem; Ruin; Ruin; Rogue(Fates used) Gem; Balance; Throne; Rogue(wishes left: 0; wishes used: 0); Rogue(wishes left: 0; wishes used: 0);
Dlaczego to się skończyło?