Draw 'Til You Drop


17

Dans Dungeons & Dragons 5th edition (ainsi que dans la plupart des autres éditions), il existe un objet magique appelé Deck of Many Things . C'est un élément incroyablement puissant, car les cartes ont toutes des effets positifs ou négatifs très forts. Pour utiliser le jeu, un personnage déclare un nombre, puis pioche jusqu'à ce nombre de cartes, les effets s'appliquant en séquence. Si le personnage ne pioche pas toutes les cartes qu'il a déclarées, et qu'il s'est écoulé au moins 1 heure depuis la dernière carte, les autres cartes sont automatiquement piochées pour eux et les effets sont appliqués. Après que chaque carte ait été tirée, elle est retournée dans le paquet et le paquet est mélangé.

Voici une liste des effets du tirage de chacune des cartes 1 :

  • Équilibre : votre esprit subit une altération déchirante, entraînant un changement d'alignement. Le licite devient chaotique, le bien devient le mal et vice versa. Si vous êtes vraiment neutre ou non aligné, cette carte n'a aucun effet sur vous.
  • Comète : si vous battez à lui seul le prochain monstre hostile ou groupe de monstres que vous rencontrez, vous gagnez suffisamment de points d'expérience pour gagner un niveau. Sinon, cette carte n'a aucun effet.
  • Donjon : Vous disparaissez et vous tombez dans un état d'animation suspendu dans une sphère extradimensionnelle. Tout ce que vous portez et transportez reste dans l'espace que vous occupiez lorsque vous avez disparu. Vous restez emprisonné jusqu'à ce que vous soyez trouvé et retiré de la sphère. Vous ne pouvez pas être localisé par une magie de divination, mais un sort de souhait peut révéler l'emplacement de votre prison. Vous ne piochez plus de cartes.
  • Euryale . Le visage de méduse de la carte vous maudit. Vous prenez une pénalité de -2 sur les jets de sauvegarde lorsque vous êtes maudit de cette façon. Seul un dieu ou la magie de la carte The Fates peut mettre fin à cette malédiction.
  • The Fates : le tissu de Reality se déroule et tourne à nouveau, vous permettant d'éviter ou d'effacer un événement comme s'il ne s'était jamais produit. Vous pouvez utiliser la magie de la carte dès que vous piochez la carte ou à tout autre moment avant de mourir.
  • Flammes : un diable puissant devient votre ennemi. Le diable cherche votre ruine et empoisonne votre vie, savourant vos souffrances avant de tenter de vous tuer. Cette inimitié dure jusqu'à ce que vous ou le diable meure.
  • Fou : vous perdez 10 000 XP, défaussez-vous de cette carte et piochez à nouveau du paquet, en comptant les deux tirages comme l'un de vos tirages déclarés. Si perdre autant d'XP vous ferait perdre un niveau, vous perdez plutôt un montant qui vous laisse juste assez d'XP pour garder votre niveau.
  • Gemme : Vingt-cinq bijoux d'une valeur de 2000 gp chacun ou cinquante gemmes d'une valeur de 1000 gp chacun apparaissent à vos pieds.
  • Idiot : réduisez définitivement votre Intelligence de 1d4 + 1 (à un score minimum de 1). Vous pouvez piocher une carte supplémentaire au-delà de vos tirages déclarés.
  • Bouffon : Vous gagnez 10 000 XP, ou vous pouvez piocher deux cartes supplémentaires au-delà de vos tirages déclarés. Défaussez cette carte après l'avoir tirée.
  • Clé : Une arme magique rare ou plus rare avec laquelle vous êtes compétent apparaît entre vos mains. Le MJ choisit l'arme.
  • Chevalier : Vous gagnez le service d'un combattant de niveau 4 qui apparaît dans un espace que vous choisissez à moins de 30 pieds de vous. Le combattant est de la même race que vous et vous sert fidèlement jusqu'à la mort, croyant que le destin l'a attiré vers vous. Vous contrôlez ce personnage.
  • Lune : Vous avez la possibilité de lancer le sort de souhait 1d3 fois.
  • Voleur : un personnage non joueur du choix du MJ devient hostile envers vous. L'identité de votre nouvel ennemi n'est connue que lorsque le PNJ ou quelqu'un d'autre l'a révélée. Rien de moins qu'un sort de souhait ou une intervention divine peut mettre fin à l'hostilité du PNJ envers vous.
  • Ruine : Toutes les formes de richesse que vous portez ou possédez, à l'exception des objets magiques, vous sont perdues. La propriété portable disparaît. Les entreprises, les bâtiments et les terrains que vous possédez sont perdus d'une manière qui altère le moins la réalité. Toute documentation prouvant que vous devez posséder quelque chose perdu sur cette carte disparaît également.
  • Crâne . Vous invoquez un avatar de la mort - un squelette humanoïde fantomatique vêtu d'une robe noire en lambeaux et portant une faux spectrale. Il apparaît dans un espace au choix du MJ à moins de 10 pieds de vous et vous attaque, avertissant tous les autres que vous devez gagner la bataille seul. L'avatar se bat jusqu'à ce que vous mouriez ou il tombe à 0 point de vie, après quoi il disparaît. Si quelqu'un essaie de vous aider, l'assistant invoque son propre avatar de mort. Une créature tuée par un avatar de mort ne peut pas retrouver la vie.
  • Étoile : augmentez l'un de vos scores de capacité de 2. Le score peut dépasser 20 mais pas 24.
  • Soleil : vous gagnez 50 000 XP, et un objet merveilleux (que le MJ détermine au hasard) apparaît entre vos mains.
  • Serres : chaque objet magique que vous portez ou transportez se désintègre. Les artefacts en votre possession ne sont pas détruits mais disparaissent.
  • Trône : vous gagnez en compétence dans la compétence Persuasion et vous doublez votre bonus de compétence sur les contrôles effectués avec cette compétence. De plus, vous obtenez la propriété légitime d'un petit donjon quelque part dans le monde. Cependant, le donjon est actuellement entre les mains de monstres, que vous devez vider avant de pouvoir le revendiquer comme le vôtre.
  • Vizir : À tout moment que vous choisissez dans l'année suivant le tirage de cette carte, vous pouvez poser une question en méditation et recevoir mentalement une réponse véridique à cette question. Outre les informations, la réponse vous aide à résoudre un problème déroutant ou un autre dilemme. En d'autres termes, la connaissance vient avec la sagesse sur la façon de l'appliquer.
  • The Void : Cette carte noire est synonyme de catastrophe. Votre âme est tirée de votre corps et contenue dans un objet dans un endroit au choix du MJ. Un ou plusieurs êtres puissants gardent l'endroit. Alors que votre âme est emprisonnée de cette façon, votre corps est frappé d'incapacité. Un sort de souhait ne peut pas restaurer votre âme, mais le sort révèle l'emplacement de l'objet qui le contient. Vous ne piochez plus de cartes.

(descriptions des cartes copiées à partir du DDR 5e édition de D&D )

Certains joueurs particulièrement stupides tireront un grand nombre de cartes à la fois, dans l'espoir d'obtenir au moins une aubaine puissante pour équilibrer les cartes préjudiciables. Comme on pouvait s'y attendre, cela entraîne souvent la mort du personnage ou son incapacité à continuer à tirer des cartes.

Le défi

Simulez un dessin répété à partir d'un jeu de 22 cartes contenant de nombreuses choses , en sortant chaque carte tirée, en vous arrêtant uniquement lorsque l'une des conditions suivantes est remplie:

  • Le personnage meurt (en piochant Skull , ou en piochant 5 cartes après avoir pioché Flames ou Rogue , sans bénéficier de The Fates ou Moon active 2 ).
  • Le personnage est incapable de piocher plus de cartes (via les effets de Donjon , Talons , The Void 3 ou le score d'Intelligence du personnage passant à 3 ou moins via Idiot 4 ).

Règles

  • L'alignement, le niveau, l'XP et les possessions du personnage autres que le deck n'ont pas d'importance.
  • Le score d'Intelligence du personnage commence à 10.
  • Il n'y a pas de limite maximale à l'Intelligence du personnage ou à ses utilisations stockées de souhait .
  • Les utilisations de The Fates ne se cumulent pas.
  • Le sort de souhait a 1 chance sur 3 d'empêcher le personnage de ne plus jamais pouvoir utiliser le sort de souhait , en plus de son effet régulier. Si cela se produit, le personnage ne peut plus utiliser le sort pour annuler Flames , Rogue ou Skull - le pouvoir de The Fates est leur seul recours.
  • Le personnage fait toujours les choix suivants:
    • Le destin et la lune sont uniquement utilisés pour sortir le personnage des ennuis de Skull , Flames et Rogue . Le personnage ne les utilisera jamais pour inverser l'effet de Serres ou le sort de souhait ne pouvant plus être lancé, et ne peut pas les utiliser pour inverser les effets de Donjon et du Vide . Le personnage utilisera immédiatement un sort de souhait pour annuler les effets de Crâne , Flammes ou Voleur lors du dessin de l'un d'entre eux, et il réussira toujours. Le personnage utilisera toujours The Fates avant d'utilisersouhaite .
    • Le personnage choisit toujours de tirer plus de cartes avec les effets d' Idiot et de Bouffon (de manière appropriée).
    • L'effet de Star est toujours utilisé pour augmenter l'Intelligence de 2, pour éviter d'avoir à arrêter de piocher des cartes via l'effet d' Idiot .
  • L'allié PNJ invoqué par Knight n'est pas assez puissant pour sauver le personnage de sa disparition prématurée.
  • Toute augmentation ou diminution de l'Intelligence (via Star ou Idiot , respectivement) doit être reflétée dans la sortie (soit en notant le changement ( +2ou -(1d4+1)), soit en émettant le score d'Intelligence actuel après que l'effet se soit produit).
  • Toute modification du nombre d' utilisations de souhaits que le personnage a stockées doit également être reflétée dans la sortie, y compris un souhait empêchant le personnage d'utiliser le souhait .
  • Toutes les sélections aléatoires proviennent de distributions discrètes uniformes.
  • Vous pouvez choisir n'importe quel ensemble de 22 sorties distinctes pour les cartes à tirer - les noms des cartes n'ont pas à être utilisés.
  • Vous pouvez générer des modifications dans Intelligence, souhaiter des utilisations et souhaiter devenir inutilisable de la manière cohérente et non ambiguë de votre choix.
  • Le personnage peut utiliser le souhait ou le pouvoir de The Fates pour éviter la mort si la carte appropriée est tirée comme cinquième carte après avoir pioché Rogue ou Flames . Ce n'est que si le souhait est inutilisable ou que toutes les utilisations ont été utilisées, ainsi que The Fates n'est pas dessiné à temps ou a déjà été utilisé, que le personnage mourra.
  • Fool et Jester sont jetés après avoir été tirés. Toutes les autres cartes sont immédiatement renvoyées dans le jeu, puis le jeu est mélangé.
  • S'il y a plusieurs piles de Voleur et / ou de Flamme actives, une seule utilisation de The Fates ou Wish est nécessaire pour les dissiper toutes.
  • Piocher plusieurs cartes à la fois via Jester ou Fool ne fait pas avancer le compteur de tours sur Flames et / ou Rogue .

Exemples

Chaque ligne représente une séquence de tirages. Les modifications apportées à Intelligence et aux utilisations souhaitées sont indiquées par la valeur actuelle entre parenthèses. Une utilisation à Ccôté d'un souhait indique ce souhait ne peut plus être utilisé. A Findique que le pouvoir de The Fates a été utilisé pour éviter la mort. Des commentaires supplémentaires sont fournis à titre explicatif, sous la forme de commentaires de style 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

Implémentation de référence

#!/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]: Techniquement, il existe deux variantes: une avec 13 cartes et une avec 22 cartes. Nous ne sommes préoccupés que par la version complète de 22 cartes ici.

[2]: Flamme et Voleur ne tuent normalement pas le personnage, mais le PNJ hostile est supposé avoir trouvé et tué le personnage stupide après avoir eu le temps de piocher 5 cartes supplémentaires. Le spectre invoqué par Skull est extrêmement difficile à combattre, et on suppose que le personnage ne gagne pas. Seule intervention divine / magique via The Fates ou Moon peut sauver le personnage stupide de sa mort par ces 3 cartes.

[3]: Nous supposons que les amis du personnage sont assez intelligents pour ne pas essayer de sauver le personnage et leur permettre de piocher plus de cartes.

[4]: Un score d'Intelligence de 3 est à peu près équivalent à un animal sauvage, qui ne serait pas en mesure de faire activement le choix de piocher des cartes.



Il serait peut-être bon d'inclure d'autres parcours d'exemple où a) les cinq tours expirent, idéalement avec quelques cartes bonus tirées entre les deux, b) le destin est tiré deux fois, avec et sans en faire usage entre les deux.
Martin Ender

Votre implémentation de référence ne laisse pas le souhait expirer s'il est utilisé au moment où la Lune est dessinée. Et il ne vérifie pas non plus s'ils ont déjà expiré.
Martin Ender

Encore une chose: les règles originales de D&D mentionnent des cartes supplémentaires pour tous les Idiot, Fool et Jester. Vos règles indiquent d'abord que le joueur pioche une carte supplémentaire pour Idiot et Jester, puis clarifie le compteur de règles pour Fool et Jester, et votre implémentation de référence semble tirer uniquement des cartes supplémentaires pour Fool et Jester. Pourriez-vous clarifier / corriger cela?
Martin Ender

2
@steenbergh J'ai également lu au-delà au début, mais "Une fois chaque carte tirée, elle est renvoyée dans le jeu et le jeu est mélangé. ". Seuls les imbéciles et les bouffons seront retirés lors du tirage, tout le reste est à nouveau placé dans le jeu et remélangé à chaque fois avant qu'une nouvelle carte ne soit tirée.
Kevin Cruijssen

Réponses:


4

JavaScript (ES6), 379 octets

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

Non golfé

Explication de la sortie

Les cartes vont de 0 à 21 comme suit:

  • 0: Destins
  • 1: fou
  • 2: bouffon
  • 3: Crâne
  • 4: Donjon
  • 5: néant
  • 6: Serres
  • 7: Flammes
  • 8: Voleur
  • 9: Lune
  • 10: Idiot
  • 11: Étoile
  • 12 à 21: Soleil, Trône, Clé, Chevalier, Ruine, Euryale, Vizir, Comète, Gemme, Balance

Une inversion de Skull, Flames ou Rogue via The Fates est indiquée par a 0.


JavaScript (ES6), 792 octets

Version précédente utilisant des noms de carte, avant de découvrir que 22 sorties distinctes sont autorisées.

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)

Non golfé


2
@Mego honnêtement, je ne l'ai pas vraiment compris aussi bien que je l'aurais dû avant d'avoir vu cette réponse, c'était bien fait; facile à comprendre en voyant les noms complets. Si vous le changez, pouvez-vous conserver une version avec les noms complets?
Urne de poulpe magique

@MagicOctopusUrn Certainement, je serai sûr de conserver la version actuelle du nom complet à l'avenir.
darrylyeo

@Mego, il était destiné à OP et disait simplement que "la version avec les noms de cartes réels épelés rendait cette implémentation facile à lire. Si vous rasez les octets, gardez-la aussi, étiquetée comme" non golfée "".
Urne de poulpe magique

@MagicOctopusUrn Mis à jour.
darrylyeo

0

Kotlin , 1173 octets

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

Il est également exécutable. - Essayez-le en ligne!

Il y a probablement beaucoup de bugs ... faites le moi savoir dans les commentaires!


Impression en boucle infinie Foolou Jester.
FrownyFrog

0

Java 8, 481 480 octets

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

Portage de l'implémentation de référence Python3 en Java, puis déclinaison. Peut certainement être joué plus, mais ce n'est qu'une version initiale pour m'assurer que j'ai tout fait correctement.

Si quelqu'un repère des erreurs ( cela ne me surprendrait pas s'il y a des modifications: déjà corrigé comme sept ou huit erreurs depuis que j'ai posté cela ..), veuillez me le faire savoir.

Sorties de carte:

0: Destins
1: Lune
2: Flammes
3: Voleur
4: Crâne
5 : Idiot
6: Étoile
7/ 8/ 9: Donjon / Vide / Talons
20/ 21: Fou / Bouffon

10-19: tout le reste (Soleil / Trône / Clé / Chevalier / Ruine / Euryale / Vizir / Comète / Gemme / Balance)

Format de sortie pour les souhaits laissés, les souhaits utilisés, l'intelligence gauche et l'indicateur utilisé:

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

Explication:

Essayez-le ici ou essayez-le ici avec une sortie assez imprimée .

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);Pourquoi cela s'est-il arrêté?
FrownyFrog

@FrownyFrog Merci! Devrait être corrigé maintenant. Si vous repérez d'autres erreurs, faites-le moi savoir. :)
Kevin Cruijssen
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.