Disegna fino allo sfinimento


17

Nella 5a edizione di Dungeons & Dragons (così come nella maggior parte delle altre edizioni), esiste un oggetto magico chiamato Deck of Many Things . È un oggetto incredibilmente potente, poiché tutte le carte hanno effetti positivi o negativi molto forti. Per usare il mazzo, un personaggio dichiara un numero, quindi pesca fino a quel numero di carte, con gli effetti che si applicano in sequenza. Se il personaggio non pesca tutte le carte che ha dichiarato, ed è passata almeno 1 ora dall'ultima carta pescata, il resto delle carte viene automaticamente pescato per loro e gli effetti applicati. Dopo che ogni carta è stata pescata, viene rimessa nel mazzo e il mazzo viene mischiato.

Di seguito è riportato un elenco degli effetti del pescare ciascuna delle carte 1 :

  • Equilibrio : la tua mente soffre di una strabiliante alterazione, che fa cambiare il tuo allineamento. Il lecito diventa caotico, il bene diventa malvagio e viceversa. Se sei veramente neutro o non allineato, questa carta non ha alcun effetto su di te.
  • Cometa : se sconfiggi da solo il prossimo mostro ostile o gruppo di mostri che incontri, ottieni punti esperienza sufficienti per ottenere un livello. Altrimenti, questa carta non ha effetto.
  • Donjon : scompari e rimani sepolto in uno stato di animazione sospesa in una sfera estradimensionale. Tutto ciò che indossavi e trasportavi rimane dietro nello spazio che occupavi quando sei scomparso. Rimani imprigionato fino a quando non sei trovato e rimosso dalla sfera. Non puoi essere individuato da nessuna magia divinazione, ma un incantesimo desiderio può rivelare la posizione della tua prigione. Non pesca più carte.
  • Euryale . Il volto simile alla medusa della carta ti maledice. In questo modo subisci una penalità di -2 al salvataggio dei tiri mentre sei maledetto. Solo un dio o la magia della carta The Fates può porre fine a questa maledizione.
  • The Fates : il tessuto della realtà si dipana e gira di nuovo, permettendoti di evitare o cancellare un evento come se non fosse mai successo. Puoi usare la magia della carta non appena pesca la carta o in qualsiasi altro momento prima di morire.
  • Fiamme : un potente diavolo diventa il tuo nemico. Il diavolo cerca la tua rovina e affligge la tua vita, assaporando la tua sofferenza prima di tentare di ucciderti. Questa inimicizia dura fino alla morte di te o del diavolo.
  • Matto : perdi 10.000 XP, scarti questa carta e pesca di nuovo dal mazzo, contando entrambi i progetti come uno dei tuoi progetti dichiarati. Se perdere così tanti XP ti farebbe perdere un livello, perdi invece un importo che ti lascia con abbastanza XP per mantenere il tuo livello.
  • Gemma : Venticinque pezzi di gioielleria del valore di 2.000 mo ciascuno o cinquanta gemme del valore di 1.000 mo ciascuno appaiono ai tuoi piedi.
  • Idiota : riduci permanentemente la tua intelligenza di 1d4 + 1 (ad un punteggio minimo di 1). Puoi pescare una carta aggiuntiva oltre le tue pescate dichiarate.
  • Giullare : guadagni 10.000 XP o puoi pescare altre due carte oltre le tue pescate dichiarate. Scarta questa carta dopo averla pescata.
  • Chiave : un'arma magica rara o più rara con cui sei abile appare nelle tue mani. Il GM sceglie l'arma.
  • Knight : ottieni il servizio di un combattente di 4 ° livello che appare in uno spazio che scegli entro 30 piedi da te. Il combattente è della tua stessa razza e ti serve fedelmente fino alla morte, credendo che il destino ti abbia attirato. Tu controlli questo personaggio.
  • Luna : ti viene data la possibilità di lanciare l'incantesimo dei desideri 1d3 volte.
  • Ladro : un personaggio non giocante scelto dal GM diventa ostile nei tuoi confronti. L'identità del tuo nuovo nemico non è nota fino a quando l'NPC o qualcun altro non lo rivela. Nient'altro che un incantesimo di desiderio o un intervento divino può porre fine all'ostilità dell'NPC nei tuoi confronti.
  • Rovina : tutte le forme di ricchezza che porti o possiedi, tranne gli oggetti magici, ti perdono. La proprietà portatile svanisce. Le aziende, gli edifici e i terreni che possiedi si perdono in un modo che altera il meno possibile la realtà. Anche la documentazione che dimostra che dovresti possedere qualcosa perso in questa carta scompare.
  • Skull . Richiami un avatar della morte: uno scheletro umanoide spettrale vestito con una tunica nera a brandelli e con una falce spettrale. Appare in uno spazio a scelta del GM entro 10 piedi da te e ti attacca, avvertendo tutti gli altri che devi vincere la battaglia da solo. L'avatar combatte fino alla morte o scende a 0 punti ferita, dopodiché scompare. Se qualcuno cerca di aiutarti, l'helper evoca il suo avatar di morte. Una creatura uccisa da un avatar di morte non può essere ripristinata in vita.
  • Stella : aumenta uno dei punteggi delle tue abilità di 2. Il punteggio può superare 20 ma non può superare 24.
  • Sole : ottieni 50.000 XP e un oggetto meraviglioso (che il GM determina casualmente) appare nelle tue mani.
  • Talons : ogni oggetto magico che indossi o porti con te si disintegra. Gli artefatti in tuo possesso non vengono distrutti ma svaniscono.
  • Trono : acquisisci competenza nell'abilità Persuasione e raddoppi il tuo bonus di competenza sui controlli effettuati con quell'abilità. Inoltre, ottieni la legittima proprietà di un piccolo allevamento da qualche parte nel mondo. Tuttavia, il mastio è attualmente nelle mani di mostri, che devi eliminare prima di poter rivendicare il mastio come tuo.
  • Visir : In qualsiasi momento, entro un anno dalla scelta della carta, puoi fare una domanda in meditazione e ricevere mentalmente una risposta veritiera a quella domanda. Oltre alle informazioni, la risposta ti aiuta a risolvere un problema sconcertante o altro dilemma. In altre parole, la conoscenza arriva con saggezza su come applicarla.
  • The Void : questa carta nera indica un disastro. La tua anima viene attirata dal tuo corpo e contenuta in un oggetto in un luogo a scelta del GM. Uno o più potenti esseri custodiscono il luogo. Mentre la tua anima è intrappolata in questo modo, il tuo corpo è inabilitato. Un incantesimo del desiderio non può ripristinare la tua anima, ma l'incantesimo rivela la posizione dell'oggetto che lo tiene. Non pesca più carte.

(descrizioni delle carte copiate dal D&D 5a edizione SRD )

Alcuni giocatori particolarmente sciocchi pesceranno contemporaneamente un gran numero di carte, sperando di ottenere almeno un potente vantaggio per bilanciare le carte dannose. Come ci si potrebbe aspettare, ciò porta spesso alla morte o all'impossibilità del personaggio di continuare a pescare carte.

La sfida

Simula il disegno ripetuto da un mazzo di molte cose da 22 carte , producendo ogni carta pescata, fermandosi solo quando si verifica una delle seguenti condizioni:

  • Il personaggio muore (pescando Skull o pescando 5 carte dopo aver pescato Flames o Rogue , senza il beneficio di The Fates o Moon active 2 ).
  • Il personaggio non è in grado di pescare più carte (tramite gli effetti di Donjon , Talons , The Void 3 o il punteggio di Intelligenza del personaggio che scende a 3 o inferiore tramite Idiot 4 ).

Regole

  • L'allineamento, il livello, i PE e le proprietà del personaggio diversi dal mazzo non contano.
  • Il punteggio di Intelligenza del personaggio inizia da 10.
  • Non esiste un limite massimo all'intelligenza del personaggio o ai suoi usi accumulati di desideri .
  • Gli usi di The Fates non si accumulano.
  • L' incantesimo del desiderio ha una probabilità 1 in 3 di impedire al personaggio di riutilizzare mai l' incantesimo del desiderio , oltre al suo effetto regolare. In questo caso, il personaggio non può più usare l'incantesimo per negare Fiamme , Ladro o Cranio : il potere di The Fates è la loro unica risorsa.
  • Il personaggio fa sempre le seguenti scelte:
    • The Fates e Moon sono usati esclusivamente per mettere il personaggio fuori dai guai da Skull , Flames e Rogue . Il personaggio non li userà mai per annullare l'effetto di Talon o l' incantesimo del desiderio non può essere lanciato di nuovo, e non può usarli per annullare gli effetti di Donjon e The Void . Il personaggio utilizzerà immediatamente un incantesimo di desiderio per annullare gli effetti di Teschio , Fiamme o Ladro quando ne disegna uno, e avrà sempre successo. Il personaggio userà sempre The Fates prima dell'usodesiderio .
    • Il personaggio sceglie sempre di pescare più carte con gli effetti di Idiot e Jester (in modo appropriato).
    • L'effetto di Star viene sempre usato per aumentare l'intelligenza di 2, per evitare di dover smettere di pescare carte tramite l'effetto di Idiot .
  • L'alleato NPC evocato da Knight non è abbastanza potente da salvare il personaggio dalla sua prematura scomparsa.
  • Eventuali aumenti o diminuzioni dell'intelligence (rispettivamente tramite Star o Idiot ) devono essere riflessi nell'output (notando la modifica ( +2o -(1d4+1)), o emettendo il punteggio di Intelligence corrente dopo che l'effetto ha avuto luogo).
  • Qualsiasi modifica al numero di desideri che il personaggio ha accumulato deve essere riflessa in modo simile nell'output, incluso un desiderio che impedisce al personaggio di utilizzare più il desiderio .
  • Tutte le selezioni casuali provengono da distribuzioni discrete uniformi.
  • Puoi scegliere un qualsiasi set di 22 output distinti per l'output delle carte pescate - i nomi delle carte non devono essere usati.
  • È possibile che vengano apportate modifiche all'Intelligence, utilizzi dei desideri e desideri diventare inutilizzabili in qualsiasi modo coerente e inequivocabile di tua scelta.
  • Il personaggio può usare il desiderio o il potere di The Fates per evitare la morte se la carta appropriata viene pescata come quinta carta dopo aver pescato Ladro o Fiamme . Solo se il desiderio è inutilizzabile o tutti gli usi sono stati usati, così come The Fates non è disegnato in tempo o è già stato usato, il personaggio morirà.
  • Fool e Jester vengono scartati dopo essere stati pescati. Tutte le altre carte vengono immediatamente rimesse nel mazzo e il mazzo viene poi mescolato.
  • Se ci sono più pile di Ladro e / o Fiamma attivi, è necessario un solo uso di The Fates o desiderio per dissiparli tutti.
  • Pescare più carte contemporaneamente tramite Jester o Fool non fa avanzare il segnalino turno su Fiamme e / o Ladro .

Esempi

Ogni linea rappresenta una sequenza di pareggi. Le modifiche all'intelligenza e agli usi dei desideri sono mostrate dal valore corrente tra parentesi. Un uso Caccanto a un desiderio indica che il desiderio non può più essere utilizzato. A Findica che il potere di The Fates è stato usato per evitare la morte. Ulteriori commenti sono forniti a scopo esplicativo, sotto forma di commenti in stile Python.

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

Implementazione di riferimento

#!/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]: tecnicamente, ci sono due varianti: una con 13 carte e una con 22 carte. Siamo preoccupati solo per la versione completa di 22 carte qui.

[2]: Fiamma e Ladro normalmente non uccidono completamente il personaggio, ma si presume che l'NPC ostile abbia trovato e ucciso il personaggio sciocco dopo aver avuto il tempo di pescare altre 5 carte. Lo spettro evocato da Skull è estremamente difficile da combattere, e si presume che il personaggio non vinca. Solo un intervento divino / magico tramite The Fates o Moon può salvare il personaggio sciocco dalla sua morte con queste 3 carte.

[3]: Supponiamo che gli amici del personaggio siano abbastanza intelligenti da non provare a salvare il personaggio e consentire loro di pescare più carte.

[4]: un punteggio di Intelligenza di 3 equivale all'incirca a un animale selvatico, che non sarebbe in grado di scegliere attivamente di pescare carte.



Potrebbe essere utile includere alcune tirature di esempio in cui a) scadono i cinque turni, idealmente con alcune carte bonus pescate tra di loro, b) i destini vengono pescati due volte, con e senza farne uso nel mezzo.
Martin Ender,

L'implementazione di riferimento non lascia scadere il desiderio se viene utilizzata nel momento in cui viene disegnata la Luna. E inoltre non controlla lì se sono già scaduti.
Martin Ender,

Ancora una cosa: le regole originali di D&D menzionano carte aggiuntive per tutti Idiot, Fool e Jester. Le tue regole stabiliscono innanzitutto che il giocatore pesca carte aggiuntive per Idiot e Jester, ma poi chiarisce il contatore delle regole per Fool e Jester, e l'implementazione di riferimento sembra pescare solo carte aggiuntive per Fool e Jester. Potresti chiarire / risolvere questo?
Martin Ender,

2
@steenbergh All'inizio ho anche letto oltre, ma " Dopo che ogni carta è stata pescata, viene restituita al mazzo e il mazzo viene mescolato ". Solo il Matto e il Giullare verranno rimossi quando pescato, tutto il resto verrà nuovamente messo nel mazzo e rimescolato ogni volta prima che una nuova carta venga pescata.
Kevin Cruijssen, l'

Risposte:


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

Spiegazione dell'output

Le carte vanno da 0 a 21 come segue:

  • 0: Fates
  • 1: Matto
  • 2: giullare
  • 3: Cranio
  • 4: Donjon
  • 5: Vuoto
  • 6: Talons
  • 7: fiamme
  • 8: Ladro
  • 9: Luna
  • 10: Idiota
  • 11: Star
  • 12 sebbene 21: Sole, Trono, Chiave, Cavaliere, Rovina, Euridale, Visir, Cometa, Gemma, Equilibrio

Un'inversione di Skull, Flames o Rogue tramite The Fates è indicata con a 0.


JavaScript (ES6), 792 byte

Versione precedente che utilizzava i nomi delle carte, prima di scoprire che erano consentite 22 uscite distinte.

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


2
@Mego onestamente, non l'ho capito bene come avrei dovuto fino a quando non ho visto questa risposta, è stato ben fatto; facile da capire quando si visualizzano i nomi completi. Se lo cambi puoi mantenere una versione con i nomi completi?
Magic Octopus Urn,

@MagicOctopusUrn Certamente, sarò sicuro di preservare l'attuale versione con nome completo in futuro.
darrylyeo,

@Mego era diretto a OP, e stava solo dicendo "la versione con i nomi delle carte effettivi scritti in modo completo ha reso questa implementazione facile da leggere. Se si eliminano i byte, tenere anche questo, etichettato come" non golfizzato "".
Magic Octopus Urn,

@MagicOctopusUrn Aggiornato.
darrylyeo,

0

Kotlin , 1173 byte

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}}}

È anche eseguibile. - Provalo online!

Probabilmente ci sono molti bug ... fammi sapere nei commenti!


Stampa a ciclo infinito Foolo Jester.
FrownyFrog,

0

Java 8, 481 480 byte

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;}}

Porting dell'implementazione di riferimento di Python3 in Java, quindi disattivata. Si può sicuramente giocare a golf di più, ma questa è solo una versione iniziale per essere sicuro di aver fatto tutto correttamente.

Se qualcuno individua degli errori ( non mi sorprenderebbe se ci fossero EDIT: già corretti come sette o otto errori da quando l'ho pubblicato ..), per favore fatemi sapere.

Uscite della scheda:

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: tutto il resto (Sole / Trono / Chiave / Cavaliere / Rovina / Euryale / Visir / Cometa / Gemma / Equilibrio)

Formato di output per desideri lasciati, desideri usati, intelligenza lasciata e flag usati:

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

Spiegazione:

Provalo qui o Provalo qui con un output piuttosto stampato .

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

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);Perché si è fermato?
FrownyFrog,

@FrownyFrog Grazie! Ora dovrebbe essere risolto. Se noti altri errori, fammi sapere. :)
Kevin Cruijssen il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.