Zeichnen bis zum Umfallen

17

In der fünften Ausgabe von Dungeons & Dragons (wie auch in den meisten anderen Ausgaben) gibt es einen magischen Gegenstand namens Deck of Many Things . Es ist ein unglaublich mächtiger Gegenstand, da alle Karten sehr starke positive oder negative Auswirkungen haben. Um das Deck zu benutzen, deklariert ein Charakter eine Zahl und zieht dann bis zu dieser Anzahl von Karten, wobei die Effekte nacheinander angewendet werden. Wenn der Charakter nicht alle Karten zieht, die er deklariert hat, und es mindestens 1 Stunde her ist, seit die letzte Karte gezogen wurde, werden die restlichen Karten automatisch für sie gezogen und die Effekte angewendet. Nachdem jede Karte gezogen wurde, wird sie in den Stapel zurückgelegt und der Stapel gemischt.

Das Folgende ist eine Liste der Effekte des Zeichnens jeder der Karten 1 :

  • Balance : Ihr Verstand leidet unter einer schmerzhaften Veränderung, die zu einer Veränderung Ihrer Ausrichtung führt. Recht wird chaotisch, Gut wird böse und umgekehrt. Wenn Sie neutral oder unausgerichtet sind, hat diese Karte keine Auswirkungen auf Sie.
  • Komet : Wenn Sie das nächste feindliche Monster oder die nächste Gruppe von Monstern, denen Sie begegnen, im Alleingang besiegen, erhalten Sie genug Erfahrungspunkte, um eine Stufe zu erreichen. Ansonsten hat diese Karte keine Wirkung.
  • Donjon : Sie verschwinden und geraten in einen Zustand schwebender Animation in einer extradimensionalen Sphäre. Alles, was Sie anhatten und trugen, bleibt in dem Raum zurück, den Sie einnahmen, als Sie verschwanden. Sie bleiben eingesperrt, bis Sie gefunden und aus der Sphäre entfernt werden. Sie können von keiner Wahrsagungsmagie geortet werden, aber ein Wunschzauber kann den Ort Ihres Gefängnisses offenbaren. Sie ziehen keine Karten mehr.
  • Euryale . Das medusenartige Antlitz der Karte verflucht dich. Wenn du auf diese Weise verflucht bist, erhältst du eine Strafe von -2, wenn du Würfe sparst. Nur ein Gott oder die Magie der Schicksalskarte kann diesen Fluch beenden.
  • The Fates : Realitys Stoff löst sich und dreht sich erneut, sodass Sie ein Ereignis vermeiden oder löschen können, als wäre es nie passiert. Sie können die Magie der Karte verwenden, sobald Sie die Karte ziehen oder zu einem anderen Zeitpunkt, bevor Sie sterben.
  • Flammen : Ein mächtiger Teufel wird dein Feind. Der Teufel sucht dein Verderben und plagt dein Leben, genießt dein Leiden, bevor er versucht, dich zu töten. Diese Feindschaft dauert an, bis entweder du oder der Teufel stirbt.
  • Narr : Du verlierst 10.000 EP, wirfst diese Karte ab und ziehst erneut vom Stapel, wobei beide Ziehungen als eine deiner deklarierten Ziehungen gezählt werden. Wenn Sie so viele EP verlieren, verlieren Sie stattdessen einen Betrag, der Ihnen gerade genug EP lässt, um Ihr Niveau zu halten.
  • Edelstein : Fünfundzwanzig Schmuckstücke im Wert von jeweils 2.000 gp oder fünfzig Edelsteine ​​im Wert von jeweils 1.000 gp erscheinen zu Ihren Füßen.
  • Idiot : Verringere deine Intelligenz dauerhaft um 1W4 + 1 (auf eine Mindestpunktzahl von 1). Sie können eine weitere Karte über Ihre angegebenen Ziehungen hinaus ziehen.
  • Jester : Du erhältst 10.000 EP, oder du kannst zwei zusätzliche Karten ziehen, die über deine angegebenen Ziehungen hinausgehen. Lege diese Karte ab, nachdem du sie gezogen hast.
  • Schlüssel : Eine seltene oder seltenere magische Waffe, mit der Sie sich auskennen, erscheint in Ihren Händen. Der GM wählt die Waffe.
  • Ritter : Du erhältst den Dienst eines Kämpfers der 4. Stufe, der auf einem Feld erscheint, das du in einem Umkreis von 30 Fuß von dir auswählst. Der Kämpfer ist von der gleichen Rasse wie Sie und dient Ihnen loyal bis zum Tod, weil er glaubt, dass das Schicksal ihn oder sie zu Ihnen hingezogen hat. Du kontrollierst diesen Charakter.
  • Mond : Du hast die Möglichkeit, den Wunschzauber 1W3 Mal zu wirken.
  • Schurke : Ein Nichtspieler-Charakter nach Wahl des GM wird dir feindlich gesinnt. Die Identität deines neuen Feindes ist erst bekannt, wenn der NPC oder jemand anderes es verrät. Nicht weniger als ein Wunschzauber oder eine göttliche Intervention können die Feindseligkeit des NPCs gegen Sie beenden.
  • Ruin : Alle Arten von Reichtum, die Sie tragen oder besitzen, außer magischen Gegenständen, gehen Ihnen verloren. Mobiles Eigentum verschwindet. Unternehmen, Gebäude und Grundstücke, die Sie besitzen, gehen auf eine Weise verloren, die die Realität am wenigsten verändert. Jede Dokumentation, die belegt, dass Sie etwas besitzen sollten, das für diese Karte verloren gegangen ist, verschwindet ebenfalls.
  • Schädel . Du beschwörst einen Avatar des Todes - ein gespenstisches humanoides Skelett, das in eine zerlumpte schwarze Robe gehüllt ist und eine Spektralsense trägt. Es erscheint in einem Feld der Wahl des GM innerhalb von 10 Fuß von Ihnen und greift Sie an und warnt alle anderen, dass Sie die Schlacht alleine gewinnen müssen. Der Avatar kämpft bis du stirbst oder er fällt auf 0 Trefferpunkte, woraufhin er verschwindet. Wenn jemand versucht, Ihnen zu helfen, ruft der Helfer seinen eigenen Avatar des Todes herbei. Eine Kreatur, die von einem Avatar des Todes getötet wurde, kann nicht wieder zum Leben erweckt werden.
  • Stern : Erhöhen Sie einen Ihrer Fähigkeitswerte um 2. Der Wert kann 20, aber nicht mehr als 24 betragen.
  • Sonne : Du erhältst 50.000 EP und ein wundersamer Gegenstand (den der GM zufällig bestimmt) erscheint in deinen Händen.
  • Krallen : Jeder magische Gegenstand, den Sie tragen oder tragen, zerfällt. In Ihrem Besitz befindliche Artefakte werden nicht zerstört, sondern verschwinden.
  • Thron : Sie erwerben Kenntnisse in der Fähigkeit "Überzeugen" und verdoppeln Ihren Kompetenzbonus für Schecks, die mit dieser Fähigkeit durchgeführt wurden. Darüber hinaus erwerben Sie den rechtmäßigen Besitz eines kleinen Bergfrieds irgendwo auf der Welt. Der Bergfried befindet sich jedoch derzeit in den Händen von Monstern, die Sie ausräumen müssen, bevor Sie den Bergfried für sich beanspruchen können.
  • Wesir : Sie können jederzeit innerhalb eines Jahres nach dem Zeichnen dieser Karte eine Frage in Meditation stellen und eine wahrheitsgemäße Antwort auf diese Frage erhalten. Neben Informationen hilft Ihnen die Antwort bei der Lösung eines rätselhaften Problems oder eines anderen Dilemmas. Mit anderen Worten, das Wissen kommt mit der Weisheit, wie man es anwendet.
  • Die Leere : Diese schwarze Karte ist eine Katastrophe. Ihre Seele wird aus Ihrem Körper gezogen und in einem Objekt an einem Ort der Wahl des GM enthalten. Ein oder mehrere mächtige Wesen bewachen den Ort. Während Ihre Seele auf diese Weise gefangen ist, ist Ihr Körper handlungsunfähig. Ein Wunschzauber kann deine Seele nicht wiederherstellen, aber der Zauber enthüllt die Position des Objekts, in dem er sich befindet. Sie ziehen keine Karten mehr.

(Kartenbeschreibungen aus der D & D 5th Edition SRD kopiert )

Einige besonders dumme Spieler werden eine große Anzahl von Karten auf einmal ziehen, in der Hoffnung, mindestens einen mächtigen Segen zu erhalten, um die schädlichen Karten auszugleichen. Wie zu erwarten ist, führt dies häufig zum Tod oder zur Unfähigkeit des Charakters, weiterhin Karten zu ziehen.

Die Herausforderung

Simulieren Sie das wiederholte Zeichnen von einem 22-Karten- Stapel mit vielen Dingen und geben Sie jede gezogene Karte aus. Halten Sie nur dann an, wenn eine der folgenden Bedingungen erfüllt ist:

  • Der Charakter stirbt (indem er Schädel zieht oder 5 Karten nach dem Ziehen von Flammen oder Schurken zieht , ohne dass Schicksale oder Mond aktiv sind 2 ).
  • Der Charakter kann nicht mehr Karten ziehen (über die Effekte von Donjon , Talons , The Void 3 oder den Intelligence Score des Charakters, der über Idiot 4 auf 3 oder niedriger fällt ).

Regeln

  • Die Ausrichtung, Stufe, EP und der Besitz des Charakters außer dem Deck spielen keine Rolle.
  • Die Intelligenzwertung des Charakters beginnt bei 10.
  • Es gibt keine Höchstgrenze für die Intelligenz des Charakters oder für die Verwendung von Wünschen .
  • Die Verwendung von The Fates ist nicht stapelbar.
  • Der Wunsch , Zauber hat eine 1-in-3 Chance, dass der Charakter nie nutzen kann Wunsch wieder Zauber, zusätzlich zu seiner regulären Wirkung. In diesem Fall kann der Charakter den Zauber nicht länger verwenden, um Flammen , Schurken oder Schädel zu annullieren - die Macht der Schicksale ist ihr einziger Rückgriff.
  • Der Charakter trifft immer die folgenden Entscheidungen:
    • Das Schicksal und der Mond werden ausschließlich verwendet, um den Charakter aus den Schwierigkeiten von Skull , Flames und Rogue zu befreien . Der Charakter wird sie niemals verwenden, um den Effekt von Talons umzukehren, oder der Wunschzauber kann nicht erneut gewirkt werden, und er wird sie nicht verwenden, um den Effekt von Donjon und The Void umzukehren . Der Charakter wird sofort einen Wunschzauber benutzen , um die Effekte von Schädel , Flammen oder Schurke zu annullieren, wenn er einen von ihnen zeichnet, und es wird immer gelingen. Der Charakter wird immer The Fates verwenden, bevor er verwendetwünschen .
    • Der Charakter wählt immer mehr Karten mit den Effekten von Idiot und Jester (passend).
    • Der Effekt von Stern wird immer dazu verwendet, die Intelligenz um 2 zu erhöhen, um zu vermeiden, dass durch den Effekt von Idiot keine Karten mehr gezogen werden müssen .
  • Der von Knight beschworene NPC-Verbündete ist nicht mächtig genug, um den Charakter vor seinem vorzeitigen Tod zu bewahren.
  • Jede Erhöhung oder Verringerung der Intelligenz (über Stern bzw. Idiot ) muss in der Ausgabe berücksichtigt werden (entweder durch Notieren der Änderung ( +2oder -(1d4+1)) oder durch Ausgeben des aktuellen Intelligenzwerts nach dem Auftreten des Effekts).
  • Alle Änderungen an der Anzahl der Wunsch , verwendet das Zeichen gehortet hat , muss in ähnlicher Weise in der Ausgabe berücksichtigt werden, darunter ein Wunsch , was das Zeichen nicht in der Lage sein verwenden Wunsch mehr.
  • Alle Zufallsauswahlen stammen aus gleichmäßigen diskreten Verteilungen.
  • Sie können einen beliebigen Satz von 22 verschiedenen Ausgängen für die gezogenen Karten auswählen - die Namen der Karten müssen nicht verwendet werden.
  • Sie können Ausgangsänderungen in Intelligenz, Wunsch Anwendungen und Wunsch unbrauchbar werden in jeder konsistenten und eindeutigen Art und Weise Ihrer Wahl.
  • Der Charakter kann den Wunsch oder die Macht der Schicksale verwenden , um den Tod zu vermeiden, wenn die entsprechende Karte als fünfte Karte nach dem Ziehen von Schurke oder Flamme gezogen wird . Nur wenn der Wunsch unbrauchbar ist oder alle Verwendungszwecke genutzt wurden, The Fates nicht rechtzeitig gezogen wird oder bereits genutzt wurde, stirbt der Charakter.
  • Dummkopf und Spaßvogel werden weggeworfen, nachdem sie gezeichnet werden. Alle anderen Karten werden sofort auf den Stapel zurückgelegt und der Stapel wird dann gemischt.
  • Wenn mehrere Stapel von Schurken und / oder Flammen aktiv sind, ist nur eine Verwendung von Schicksal oder Wunsch erforderlich, um alle zu zerstreuen.
  • Das gleichzeitige Ziehen mehrerer Karten über " Jester" oder " Fool" erhöht nicht den Turn Counter bei " Flames" und / oder " Rogue" .

Beispiele

Jede Linie repräsentiert eine Folge von Ziehungen. Änderungen an Intelligenz und Wunschgebrauch werden durch den aktuellen Wert in Klammern angezeigt. Eine Cneben einem Wunsch stehende Verwendung bedeutet, dass der Wunsch nicht mehr verwendet werden kann. A Fbedeutet, dass die Macht des Schicksals genutzt wurde, um den Tod zu vermeiden. Zusätzliche Kommentare werden zu Erläuterungszwecken in Form von Kommentaren im Python-Stil bereitgestellt.

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

Referenzimplementierung

#!/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]: Technisch gibt es zwei Varianten: eine mit 13 Karten und eine mit 22 Karten. Hier geht es nur um die Vollversion mit 22 Karten.

[2]: Flamme und Schurke töten den Charakter normalerweise nicht sofort, aber es wird angenommen, dass der feindliche NPC den törichten Charakter gefunden und getötet hat, nachdem er Zeit hat, 5 weitere Karten zu ziehen. Das von Skull herbeigerufene Gespenst ist extrem schwer zu bekämpfen und es wird angenommen, dass der Charakter nicht gewinnt. Nur eine göttliche / magische Intervention über The Fates oder Moon kann den törichten Charakter durch diese 3 Karten vor seinem Tod retten.

[3]: Wir gehen davon aus, dass die Freunde des Charakters klug genug sind, um nicht zu versuchen, den Charakter zu retten und ihnen zu erlauben, mehr Karten zu ziehen.

[4]: Ein Intelligenzwert von 3 entspricht in etwa einem Wildtier, das nicht in der Lage wäre, aktiv Karten zu ziehen.

Mego
quelle
Sandbox
Mego
Könnte gut sein, einige weitere Beispielläufe einzuschließen, bei denen a) die fünf Runden ablaufen, idealerweise mit einigen dazwischen gezogenen Bonuskarten, b) das Schicksal zweimal gezogen wird, mit und ohne dazwischen davon Gebrauch zu machen.
Martin Ender
Ihre Referenzimplementierung lässt den Wunsch nicht verfallen, wenn er zum Zeitpunkt der Mondzeichnung verwendet wird. Und dort wird auch nicht geprüft, ob sie bereits abgelaufen sind.
Martin Ender
Eine weitere Sache: Die ursprünglichen D & D-Regeln erwähnen zusätzliche Karten für alle Idioten, Narren und Narren. Ihre Regeln besagen zunächst, dass der Spieler zusätzliche Karten für Idiot und Jester zieht, dann aber den Regelzähler für Fool und Jester klärt, und Ihre Referenzimplementierung scheint nur zusätzliche Karten für Fool und Jester zu ziehen. Könnten Sie das klären / beheben?
Martin Ender
2
@steenbergh Ich habe es auch zuerst gelesen, aber " Nachdem jede Karte gezogen wurde, wird sie wieder in den Stapel gelegt und der Stapel gemischt. " Nur der Narr und der Narr werden beim Ziehen entfernt, alles andere wird erneut in das Deck gelegt und jedes Mal neu gemischt, bevor eine neue Karte gezogen wird.
Kevin Cruijssen

Antworten:

4

JavaScript (ES6), 379 Byte

for(D=[...Array(21)].map((a,b)=>b),d={},i=10,w=e=f=t=0,F=_=>f=t=o=0,W=_=>{w--,t=0,o=w+(e?' C':''),e=1>r(2)},r=a=>0|Math.random()*a,$=1;$;){for(;d[c=r(22)];);o='',c?3>c?(t&&(t+=c),d[c]=1):4>c?f?F():0<w&&!e?W():$=0:7>c?$=0:9>c?(!t&&(t=5),f?F():0<w&&!e&&W()):10>c?(w+=1+r(2),t?(t=0,o=[w,--w]):o=w):11>c?(i-=2+r(3),o=i,$=3<i):12>c&&(i+=2,o=i):t?F():f=1,console.log(c,o),t&&(t--,$=t)}

Ungolfed

Erläuterung der Ausgabe

Die Karten reichen von 0-21 wie folgt:

  • 0: Schicksale
  • 1: Dummkopf
  • 2: Spaßvogel
  • 3: Schädel
  • 4: Donjon
  • 5: nichtig
  • 6: Krallen
  • 7: Flammen
  • 8: Schurke
  • 9: Mond
  • 10: Idiot
  • 11: Stern
  • 12 bis 21: Sonne, Thron, Schlüssel, Ritter, Ruine, Euryale, Wesir, Komet, Edelstein, Gleichgewicht

Eine Umkehrung von Skull, Flames oder Rogue über The Fates wird mit a bezeichnet 0.


JavaScript (ES6), 792 Byte

Vorherige Version mit Kartennamen, bevor ich herausfand, dass 22 verschiedene Ausgaben zulässig sind.

d=`Sun Moon Star Throne Key Knight Void Flames Skull Ruin Euryale Rogue Jester Vizier Comet Fates Gem Talons Idiot Donjon Balance Fool`.split` `,i=10,w=0,W=!1,f=!1,t=null,F=()=>{f=!1,t=null,_('F')},U=()=>{w--,t=null,_(w+(W?' C':'')),W=1>r(2)},_=(...a)=>console.log(c+a.map(b=>` (${b})`).join``),r=a=>0|Math.random()*a,$=!0;for(;$;)c=d.splice(r(d.length),1)[0],'Fates'==c?null==t?(f=!0,_()):F():'Moon'==c?(w+=1+r(2),null==t?_(w):(t=null,w--,_(w+1,w))):'Idiot'==c?(i-=2+r(3),_(i),3>=i&&($=!1)):'Star'==c?(i+=2,_(i)):'Flames'==c||'Rogue'==c?(null==t&&(t=5),f?F():0<w&&!W?U():_()):'Skull'==c?f?F():0<w&&!W?U():(_(),$=!1):'Donjon'==c||'Void'==c||'Talons'==c?(_(),$=!1):'Fool'==c?null!==t&&(t+=1):'Jester'==c?null!==t&&(t+=2):_(),['Fool','Jester'].includes(c)||d.push(c),null!==t&&t--,0===t&&($=!1)

Ungolfed

darrylyeo
quelle
2
@Mego Ehrlich gesagt, ich habe es nicht so gut verstanden, wie ich es hätte tun sollen, bis ich diese Antwort gesehen habe. leicht zu verstehen, wenn man die vollständigen Namen sieht. Wenn Sie es ändern, können Sie eine Version mit den vollständigen Namen behalten?
Magic Octopus Urn
@MagicOctopusUrn Natürlich werde ich die aktuelle Vollnamenversion auch in Zukunft beibehalten.
darrylyeo
@Mego richtete sich an OP und sagte nur: "Die Version mit den tatsächlichen, vollständig geschriebenen Kartennamen machte diese Implementierung einfach zu lesen. Wenn Sie Bytes sparen, behalten Sie auch diese mit der Bezeichnung" ungolfed "bei."
Magic Octopus Urn
@MagicOctopusUrn Aktualisiert.
darrylyeo
0

Kotlin , 1173 Bytes

fun main(args:Array<String>){val d="Sun Moon Star Throne Key Knight Void Flames Skull Ruin Euryale Rogue Jester Vizier Comet Fates Gem Talons Idiot Donjon Balance Fool".split(" ");var c=(Math.random()*22).toInt();var i=10;var u=0;var e=false;var f=false;var t=1;r@while(true){when(c){15->{if(t>=1){f=true;println(c)}else{t = 1;f = false;println("${d[c]} (F)")}}1->{u+=(Math.random()*3).toInt()+1;if(t>=1){println("${d[c]} ($u)")}else{t=1;u-=1;println("${d[c]} (${u + 1}) ($u)")}}in arrayOf(7,11)->{if(t>=1){t=5};if(f){f=false;t=1;println("${d[c]} (F)")}else if(u>0&&!e){u-=1;t=1;val n=(Math.random()*3).toInt();println("${d[c]} ($u$e)");e=n==0}else{println(d[c])}}18->{i-=(Math.random()*4).toInt()+2;println("${d[c]} ($i)");if (t!=0){t+=1};if(i<=3){break@r}}2->{i+=2;println("${d[c]} ($i)")}8->{if(f){f=false;t=1;println("${d[c]} (F)")}else if(u>0&&!e){u-=1;t=1;val n=(Math.random()*3).toInt();println("${d[c]} ($u$e)");e=n==0}else{println(c);break@r}}in arrayOf(6,17,19)->{println(d[c]);break@r}21->{println(d[c]);if(t!=0){t += 1}}12->{println(d[c]);if(t!=0){t+=2}}else->{println(d[c])}};if((c !in arrayOf(12,21))){c=(Math.random()*23).toInt()};if(t!=0){t-=1}else{break}}}

Es ist auch lauffähig. - Probieren Sie es online!

Es gibt wahrscheinlich viele Bugs ... lass es mich in den Kommentaren wissen!

Trenton Telge
quelle
Endlosschleifendruck Fooloder Jester.
FrownyFrog
0

Java 8, 481 480 Bytes

v->{String r="";for(int i=10,d=22,c=d,F=0,t=0,w=0,W=0,j=Math.random()<.5?1:2;;c=d){c*=Math.random();r+=" "+c;if(c<1){F=1;r+=t>0?"F"+(F=0):"";t=-1;}else if(c<2){w+=Math.random()*3+1-(t>0?1:0);t=-1;}else if(c<4)t=F>0?-1:t<1?6:t;else if(c<5)t=F*w*W<1?1:-1;else if(c>19){t+=t>0?j:0;j=j%2+1;d--;}if(c>1&c<5&w*W>0){w--;W=(int)(Math.random()*3)%2;}i-=c==5?Math.random()*3+2:c==6?-2:0;r+=c>1&c<5&F>0?"F"+(F=0):c>0&c<5?"w"+w+"W"+W:c>4&c<7?"i"+i:"";if(--t==0|(c==5&i<4)|c>6&c<10)return r;}}

Portierte die Python3-Referenzimplementierung in Java und setzte sie dann ab. Kann definitiv mehr golfen werden, aber dies ist nur eine erste Version, um sicherzustellen, dass ich alles richtig gemacht habe.

Wenn jemand Fehler entdeckt ( es würde mich nicht überraschen, wenn es irgendwelche EDIT- Fehler gibt, die wie sieben oder acht Fehler behoben wurden, seit ich dies gepostet habe ..), lass es mich bitte wissen.

Kartenausgänge:

0: Fates
1: Moon
2: Flames
3: Rogue
4: Skull
5: Idiot
6: Star
7/ 8/ 9: Donjon / Void / Talons
20/ 21: Fool / Jester

10-19: alles andere (Sonne / Thron / Schlüssel / Ritter / Ruine / Euryale / Wesir / Komet / Edelstein / Gleichgewicht)

Ausgabeformat für verbleibende Wünsche, verwendete Wünsche, verbleibende Informationen und verwendetes Flag:

4w1W0
4       // Card drawn
 w1     // New amount of wishes left
   W0   // Whether the wishes used flag is active (1) or inactive (0)

5i6
5       // Card drawn
 i6     // New intelligence

0F0
0       // Card drawn
 F0     // Fates used

Erläuterung:

Versuchen Sie es hier oder versuchen Sie es hier mit hübsch gedruckter Ausgabe .

v->{                       // Method with empty unused parameter and String return-type
  String r="";             //  Result-String, starting empty
  for(int i=10,            //  Intelligence
          d=22,            //  Amount of cards in the deck, starting at 22
          c=d,             //  Current card drawn
          F=0,             //  Fates flag
          t=0,             //  Turn-counter
          w=0,             //  Wishes left
          W=0,             //  Wishes used flag
          j=Math.random()<.5?1:2;
                           //  Whether Jester/Fool is drawn first of the two
      ;                    //  Loop indefinitely
       c=d){               //    After every iteration, shuffle the deck (reset `c`)
    c*=Math.random();      //   Draw a random 0-21 card (or less if Fool/Jester is gone)
    r+=" "+c;              //   Append the result with a space and this card
    if(c<1){               //   If the card was Fates:
      F=1;                 //    Set the Fates-flag to active
      r+=t>0?              //    If the turn-counter is larger than 0:
          "F"+(F=0)        //     Append that Fates was used (and make Fates inactive)
         :                 //    Else:
          "";              //     Append nothing
      t=-1;}               //    Set the turn-counter to -1 (none)
    else if(c<2){          //   If the card was Moon instead:
      w+=Math.random()*3+1 //    Increase the wishes by 1-3 randomly
         -(t>0?            //    Then, if the turn-counter is larger than 0
            1              //     Subtract 1 from the amount of wishes
           :               //    Else:
            0);            //     Leave the wishes the same
      t=-1;}               //    Set the turn-counter to -1 (none)
    else if(c<4)           //   If the card was Flames or Rogue instead:
      t=F>0?               //    If the Fates-flag is active:
         -1                //     Set the turn-counter to -1 (none)
        :t<1?              //    Else-if the turn-counter is 0 or -1 (none):
         6                 //     Set the turn-counter to 6
        :                  //    Else:
         t;                //     Leave the turn-counter the same
    else if(c<5){          //   If the card was Skull instead:
      t=F                  //    If the Fates-flag is inactive
        *w                 //    or the amount of wishes is smaller than 1
        *W<1?              //    or the wishes used flag is inactive
         1                 //     Set the turn-counter to 1
        :                  //    Else:
         -1;               //     Set the turn-counter to -1 (none)
      F=0;}                //    Then set the Fates-flag to inactive
    else if(c>19){         //   If the card was Fool or Jester instead:
      t+=t>0?              //    If the turn-counter was not 0 or -1 (none):
          j                //     Increase either by 1 (Fool) or 2 (Jester)
         :                 //    Else:
          0;               //     Leave the turn-counter the same
      j=j%2+1;             //    Fix `j` (2->1; 1->2)
      d--;}                //    And remove the Fool/Jester from the Deck
    if(c>1&c<5             //   If the card drawn was Flames, Rogue or Skull,
       &w                  //   and the amount of wishes is at least 1,
        *W>0){             //   and the wishes used flag is active
      w--;                 //    Decrease the amount of wishes by 1
      W=(int)(Math.random()*3)%2;}
                           //    And set the wishes used flag to one of (0,0,1)
    i-=c==5?               //   If the card drawn was Idiot:
        Math.random()*3+2  //    Decrease the intelligence by 2-5 randomly
       :c==6?              //   Else-if the card drawn was Star:
        -2                 //    Increase the intelligence by 2
       :                   //   Else:
        0;                 //    Leave the intelligence the same
    r+=c>1&c<5             //   If the card drawn was Flames, Rogue or Skull,
       &F>0?               //   and Fates is active
        "F"+(F=0)          //    Append that Fates was used (and make Fates inactive)
       :c>0&c<5?           //   Else-if the card drawn was Moon, Flames, Rogue or Skull:
        "w"+w+"W"+W        //    Append the amount of wishes left and wishes used flag
       :c>4&c<7?           //   Else-if the card drawn was Idiot or Star:
        "i"+i              //    Append the amount of intelligence left
       :                   //   Else:
        "";                //    Append nothing
    if(--t                 //   Decrease the turn-counter by 1
          ==0              //   And if the turn-counter is now 0,
       |(c==5              //   or the card drawn was Idiot,
             &i<4)         //   and the intelligence dropped below 4,
       |c>6&c<10)          //   or the card drawn was Donjon, Void or Talons:
         return r;         //    Return the result of the game
  }                        //  End of loop
}                          // End of method
Kevin Cruijssen
quelle
1
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);Warum hat es aufgehört?
FrownyFrog
@FrownyFrog Danke! Sollte jetzt behoben sein. Wenn Sie andere Fehler entdecken, lassen Sie es mich wissen. :)
Kevin Cruijssen