Düşene Kadar Çiz


18

Dungeons & Dragons 5. sürümünde (ve diğer birçok sürümde), Deck of Many Things adlı sihirli bir öğe var . Kartların hepsinin çok güçlü olumlu veya olumsuz etkileri olduğu için inanılmaz derecede güçlü bir öğedir. Desteyi kullanmak için, bir karakter bir sayı bildirir ve ardından efektler sırayla uygulanacak şekilde bu kadar kart çeker. Karakter, beyan ettikleri tüm kartları çekmezse ve son kartın çekilmesinden bu yana en az 1 saat geçtiyse, kalan kartlar otomatik olarak çekilir ve uygulanan efektler. Her kart çekildikten sonra desteye geri gönderilir ve destenin karıştırılması sağlanır.

Aşağıdaki kartların her birini çizmenin etkilerinin bir listesidir 1 :

  • Denge : Zihniniz, hizalı bir değişikliğe uğrar ve hizalamanızın değişmesine neden olur. Hukukçu kaotik, iyilik kötülük ve tam tersi olur. Eğer gerçek tarafsız veya hizasızsanız, bu kartın sizin üzerinde bir etkisi yoktur.
  • Kuyruklu yıldız : Karşılaştığınız bir sonraki düşman canavarı veya canavar grubunu tek başına yenerseniz, bir seviye kazanacak kadar deneyim puanı kazanırsınız. Aksi takdirde, bu kartın bir etkisi olmaz.
  • Donjon : Kaybolup, boyutsuz bir alanda askıya alınmış bir animasyon halinde gömülüyorsunuz. Giydiğiniz ve taşıdığınız her şey, kaybolduğunuzda işgal ettiğiniz alanda kalır. Siz bulunana ve küreden uzaklaşana kadar hapsedilirsiniz. Herhangi bir kehanet büyüsü tarafından bulunamazsınız, ancak bir dilek büyüsü hapishanenizin yerini ortaya çıkarabilir. Başka kart çekmiyorsun.
  • Euryale . Kartın medusa benzeri görünümü sizi lanetliyor. Bu şekilde lanetlenirken atış atışlarında -2 ceza alırsınız. Bu laneti sadece bir tanrı ya da Kader kartının büyüsü bitirebilir.
  • The Fates : Reality'nin kumaşı, bir olayı hiç yaşanmamış gibi önleyebilir veya silebilirsiniz. Kartı çeker çekmez ya da ölmeden önce başka bir zamanda kartın büyüsünü kullanabilirsiniz.
  • Alevler : Güçlü bir şeytan düşmanınız olur. Şeytan harabenizi arar ve sizi öldürmeye çalışmadan önce acılarınızı tadarak hayatınızı rahatsız eder. Bu düşmanlık siz veya şeytan ölene kadar sürer.
  • Aptal : 10.000 DP kaybedersiniz, bu kartı atar ve desteden tekrar çekersiniz, her iki çekilişi de beyan edilen çekimlerinizden biri olarak sayarsınız. Eğer bu kadar çok XP kaybetmek bir seviyenizi kaybetmenize neden olursa, bunun yerine seviyenizi korumak için yeterli XP'ye sahip bir miktar kaybedersiniz.
  • Mücevher : Her biri 2.000 gp değerinde yirmi beş mücevher veya her biri 1.000 gp değerinde elli mücevher ayağınızda görünür.
  • Idiot : İstihbaratınızı kalıcı olarak 1d4 + 1 azaltın (en az 1 puana kadar). Beyan edilen çekilişlerin ötesinde bir kart daha çekebilirsiniz.
  • Soytarı : 10.000 DP kazanırsınız ya da beyan edilen çekilişlerinizin ötesinde iki kart daha çekebilirsiniz. Bu kartı çizdikten sonra atın.
  • Anahtar : Yetkin olduğunuz nadir veya nadir bir sihirli silah elinizde görünür. GM silahı seçer.
  • Şövalye : Seçtiğiniz bir alanda 30 feet içinde görünen 4. seviye bir savaşçının hizmetini kazanırsınız. Savaşçı seninle aynı ırktadır ve kaderlerin onu sana çektiğine inanarak sana ölümüne kadar sadakatle hizmet eder. Bu karakteri siz kontrol edersiniz.
  • Moon : Dilek büyüsünü 1 kez 3 kez yapabilme olanağına sahipsin.
  • Rogue : GM'nin seçiminin oyuncu olmayan bir karakteri size karşı düşman olur. Yeni düşmanınızın kimliği, NPC veya başkası bunu açıklayana kadar bilinmiyor. Bir dilek büyüsünden veya ilahi müdahaleden daha azı NPC'nin size karşı düşmanlığını sona erdiremez.
  • Harabe : Sihirli eşyalar dışında taşıdığınız veya sahip olduğunuz her türlü zenginlik size kaybolur. Taşınabilir özellik yok olur. Sahip olduğunuz işletmeler, binalar ve arazi, gerçekliği en az değiştirecek şekilde kaybolur. Bu karta kaybolan bir şeyin sahibi olmanız gerektiğini kanıtlayan tüm belgeler de kaybolur.
  • Kafatası . Bir ölüm avatarı çağırıyorsunuz - püskü bir siyah cüppe ile kaplı ve spektral bir tırpan taşıyan hayalet bir insansı iskelet. GM'in seçiminizin 10 metre yakınında bir alanda belirir ve size saldırır, diğerlerini de tek başına savaşı kazanmanız gerektiği konusunda uyarır. Avatar ölünceye kadar savaşır veya 0 isabet noktasına düşer, bunun üzerine kaybolur. Biri size yardım etmeye çalışırsa, yardımcı kendi ölüm avatarını çağırır. Ölüm avatarının öldürdüğü bir yaratık hayata döndürülemez.
  • Yıldız : Yetenek puanlarınızdan birini 2 arttırın. Puan 20'yi geçebilir, ancak 24'ü geçemez.
  • Güneş : 50.000 DP kazanırsınız ve (GM'in rastgele belirlediği) harika bir eşya elinizde görünür.
  • Pençe : Giydiğin ya da taşıdığın her sihirli eşya dağılıyor. Elinizdeki eserler yok edilmez, ancak yok olur.
  • Throne : İkna becerisinde yeterlilik kazanırsınız ve bu yetenekle yapılan kontrollerde yeterlilik bonusunuzu ikiye katlarsınız. Buna ek olarak, dünyanın herhangi bir yerinde küçük bir mülk sahibi olma hakkına sahip olursunuz. Ancak, bekletme şu anda canavarların elindedir, bekçiyi sizinkine göre talep edebilmeniz için temizlemeniz gerekir.
  • Vezir : Bu kartı çizdikten sonraki bir yıl içinde istediğiniz zaman, meditasyonda bir soru sorabilir ve zihinsel olarak bu soruya doğru bir cevap alabilirsiniz. Cevap, bilginin yanı sıra şaşırtıcı bir sorunu veya başka bir ikilemi çözmenize yardımcı olur. Başka bir deyişle, bilgi, onu nasıl uygulayacağınız bilgeliğiyle gelir.
  • Boşluk : Bu siyah kart felakete yol açar. Ruhunuz bedeninizden çekilir ve GM'in tercih ettiği bir yerde bir nesnede bulunur. Bir veya daha fazla güçlü varlık yeri korur. Ruhun bu şekilde hapsolmasına rağmen, vücudun yetersizdir. Bir dilek büyüsü ruhunuzu geri yükleyemez, ancak büyü onu tutan nesnenin yerini gösterir. Başka kart çekmiyorsun.

( D&D 5. baskı SRD'sinden kopyalanan kart açıklamaları )

Özellikle aptal oyunculardan bazıları, zararlı kartları dengelemek için en az bir güçlü nimet elde etmeyi umarak bir kerede çok sayıda kart çekecek. Beklendiği gibi, bu genellikle karakterin ölmesine veya kart çekmeye devam edememesine neden olur.

Meydan okuma

22 kartlık Çok Şey Destesinden tekrarlanan çizimi simüle edin , çizilen her kartın çıktısını alın ve yalnızca aşağıdaki koşullardan biri karşılandığında durun :

  • Karakter ölür ( Kafatası çizerek veya Alevler veya Rogue çizdikten sonra , Fates veya Moon active 2'nin faydası olmadan 5 kart çekerek ).
  • Karakter daha fazla kart çekemez ( Donjon , Talons , The Void 3 veya Idiot 4 aracılığıyla karakterin İstihbarat puanı 3 veya daha düşük seviyelere düşerek ).

kurallar

  • Karakterin hizalaması, seviyesi, XP ve desteden başka eşyalarının önemi yok.
  • Karakterin İstihbarat puanı 10'da başlıyor.
  • Karakterin İstihbarat veya onların depolanmış kullanımları için herhangi bir üst sınır yoktur dilek .
  • Kaderlerin kullanımı yığınlanmaz.
  • Dilek büyüsü karakter kullanmak mümkün olmayacak neden bir 1-in-3 şansı var dilek olağan etkisine ek olarak, yine büyü. Böyle bir durumda, karakter artık Alevleri , Haydut'u veya Kafatasını reddetmek için büyüyü kullanamaz - Kaderlerin gücü tek başvurularıdır.
  • Karakter her zaman aşağıdaki seçimleri yapar:
    • Kader ve Ay sadece karakteri Kafatası , Alevler ve Rogue'dan beladan çıkarmak için kullanılır . Karakter asla Talonların etkisini veya dilek büyüsünün tekrar kullanılamamasını ve Donjon ve The Void'in etkilerini tersine çevirmek için kullanamaz . Karakter , Kafatası , Alevler veya Rogue dileğinin etkilerini ortadan kaldırmak için hemen bir dilek büyüsü kullanacaktır . birini çizerken ve her zaman başarılı olacaktır. Karakter kullanmadan önce daima Kader'i kullanır
    • Karakter her zaman Idiot ve Jester efektleriyle daha fazla kart çekmeyi seçiyor (uygun şekilde) .
    • Etkisi Yıldızı daima etkisi yoluyla kartları çizim durdurmak zorunda kalmamak için, 2 ile İstihbarat artırmak için kullanılır Idiot .
  • Knight tarafından çağrılan NPC müttefiki , karakteri zamansız ölümlerinden kurtaracak kadar güçlü değil.
  • İstihbarattaki herhangi bir artış veya düşüş ( sırasıyla Star veya Idiot aracılığıyla ) çıktıya yansıtılmalıdır (ya değişiklik ( +2veya -(1d4+1)) belirtilerek ya da efekt gerçekleştikten sonra mevcut İstihbarat puanı çıkarılarak).
  • Sayısına herhangi bir değişiklik isteği karakteri dahil, benzer çıkışı yansıtılması gerekir stoklanmış olan kullanan dilek kullanmak mümkün olmayacaktır karakteri neden dileği artık.
  • Tüm rasgele seçimler tek biçimli ayrık dağılımlardan elde edilmektedir.
  • Çekilen kartlar için çıkış için herhangi bir 22 farklı çıkış seti seçebilirsiniz - kartların isimlerinin kullanılması gerekmez.
  • Sen, İstihbarat çıktı değişiklikler olabilir dilek kullanımları ve dilek sizin seçtiğiniz herhangi bir tutarlı, kesin bir biçimde kullanılamaz hale.
  • Karakter, Rogue veya Flames çizdikten sonra uygun kart beşinci kart olarak çekilirse ölümden kaçınmak için dilek veya Kaderlerin gücünü kullanabilir . Ancak dilek kullanılamazsa veya tüm kullanımlar kullanılmışsa, Kaderlerin zamanında çizilmemesi veya zaten kullanılmış olması durumunda, karakter ölecektir.
  • Fool ve Jester çekildikten sonra atılırlar . Diğer tüm kartlar hemen desteye geri gönderilir ve desteden sonra karıştırılır.
  • Birden fazla Rogue ve / veya Flame aktif yığını varsa , Kader veya dileklerin sadece bir kullanımı hepsini ortadan kaldırmak için gereklidir.
  • Jester veya Fool ile aynı anda birden fazla kart çizmek , dönüş sayacını Flames ve / veya Rogue'da ilerletmez .

Örnekler

Her çizgi bir dizi çekimi temsil eder. İstihbarat ve dilek kullanımlarındaki değişiklikler parantez içindeki geçerli değer ile gösterilir. A Cbir yanındaki dilek kullanımı olduğunu gösterir dilek artık kullanılamaz. A F, kaderlerin gücünün ölümü önlemek için kullanıldığını gösterir. Python tarzı yorumlar şeklinde açıklayıcı amaçlar için ek yorumlar sağlanır.

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

Referans uygulaması

#!/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]: Teknik olarak iki varyant vardır: biri 13 kartlı, diğeri 22 kartlı. Burada sadece 22 kartlık sürümün tamamı hakkında endişeliyiz.

[2]: Alev ve Rogue normalde karakteri açıkça öldürmez, ancak düşman NPC'nin 5 kart daha çekecek zamanları olduğunda aptal karakteri bulup öldürdüğü varsayılır. Kafatası tarafından çağrılan hayaletle savaşmak son derece zordur ve karakterin kazanmadığı varsayılır. Sadece Kader veya Ay aracılığıyla ilahi / büyülü müdahale , bu 3 kartla aptal karakteri ölümlerinden kurtarabilir.

[3]: Karakterin arkadaşlarının karakteri kurtarmaya ve daha fazla kart çekmelerine izin vermeyecek kadar akıllı olduklarını varsayıyoruz.

[4]: 3'lük bir İstihbarat puanı kabaca vahşi bir hayvana eşdeğerdir, bu da kart çekmeyi aktif olarak seçemez.



A) beş turun süresinin dolduğu, ideal olarak arasına çekilen bazı bonus kartlarla, b) kaderlerin iki kez, aralarında kullanılmadan ve kullanılmadan çekildiği daha fazla örnek koşu içermesi iyi olabilir.
Martin Ender

Referans uygulamanız, Ay'ın çizildiği anda kullanılırsa dilek süresinin dolmasına izin vermez. Ayrıca, süresi dolmuş olup olmadıklarını da kontrol etmez.
Martin Ender

Bir şey daha var: Orijinal D&D kuralları tüm Idiot, Fool ve Jester için ek kartlardan bahsediyor. Kurallarınız önce oyuncunun Idiot ve Jester için ek kart çektiğini belirtiyor, ancak daha sonra Fool ve Jester için kural sayacını netleştiriyor ve referans uygulamanız sadece Fool ve Jester için ek kartlar çiziyor gibi görünüyor. Bunu açıklayabilir / düzeltebilir misiniz?
Martin Ender

2
@steenbergh Önce de okudum ama " Her kart çekildikten sonra desteye geri gönderilir ve deste karıştırılır. " Yalnızca Fool ve Jester çekildiklerinde çıkarılır, diğer her şey desteye tekrar yerleştirilir ve her yeni kart çekilmeden önce yeniden karıştırılır.
Kevin Cruijssen

Yanıtlar:


5

JavaScript (ES6), 379 bayt

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

Çıktı Açıklaması

Kartlar 0-21 arasında değişmektedir:

  • 0: Kader
  • 1: Aptal
  • 2: Soytarı
  • 3: Kafatası
  • 4: Donjon
  • 5: Geçersiz
  • 6: Pençe
  • 7: Alevler
  • 8: Rogue
  • 9: Ay
  • Sezon 10.Bölüm Idiot.
  • 11: Yıldız
  • 12 olsa 21: Güneş, Taht, Anahtar, Şövalye, Harabe, Euryale, Vezir, Kuyruklu Yıldız, Mücevher, Denge

Kafatası, Alevler veya Rogue'un The Fates aracılığıyla ters çevrilmesi a ile gösterilir 0.


JavaScript (ES6), 792 bayt

22 ayrı çıkışa izin verildiğini öğrenmeden önce kart isimlerini kullanan önceki sürüm.

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 dürüst olmak gerekirse, bu cevabı görene kadar yapmam gereken kadar iyi alamadım, iyi yapıldı; tam isimleri gördüğünüzde anlaşılması kolaydır. Değiştirirseniz, tam adlara sahip bir sürümü tutabilir misiniz?
Sihirli Ahtapot Urn

@MagicOctopusUrn Kesinlikle, mevcut tam ad sürümünü gelecekte koruyacağımdan emin olacağım.
darrylyeo

@Mego OP'ye yönlendirildi ve sadece "gerçek kart isimlerinin bulunduğu sürüm tamamen yazıldığından bu uygulamayı okumayı kolaylaştırdı. Baytları tıraş ederseniz, bunu da" ungolfed "olarak etiketlenmiş olarak saklayın" diyordu.
Sihirli Ahtapot Urn

@MagicOctopusUrn Güncellendi.
darrylyeo

1

Java 10, 481 480 476 470 453 439 437 bayt

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

Python3 referans uygulamasını Java'da taşıdı ve sonra golf oynadı.

@ Ceilingcat sayesinde -45 bayt .

Kart çıkışları:

0: Kader
1: Ay
2: Alevler
3: Rogue
4: Kafatası
5: Idiot
6: Yıldız
7/ 8/ 9: Donjon / Void / Talons
20/ 21: Aptal / Soytarı

10-19: her şey (Güneş / Taht / Anahtar / Şövalye / Harabe / Euryale / Vezir / Kuyruklu Yıldız / Mücevher / Denge)

Kalan istekler, kullanılan istekler, kalan istihbarat ve kullanılan bayrak için çıktı biçimi:

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

Açıklama:

Burada deneyin veya güzel yazdırılmış çıktı ile burada deneyin .

v->{                       // Method with empty unused parameter and String return-type
  var r="";                //  Result-String, starting empty
  Math M=null;             //  Static Math to save bytes
  int i=10,                //  Intelligence, starting at 10
      d=22,                //  Amount of cards in the deck, starting at 22
      c,                   //  Current card drawn
      F=0,                 //  Fates flag, starting at inactive
      t=0,                 //  Turn-counter, starting at 0
      w=0,                 //  Wishes left, starting at 0
      W=0,                 //  Wishes used flag, starting at 0
      j=2;for(j*=M.random()//  Whether Jester/Fool is drawn first of the two, random 0/1
      ;;){                 //  Loop indefinitely:
    c=d;c*=M.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
    t=c<1?                 //   If the card was Fates:
      (r+=t<(F=1)          //    Set the Fates-flag to active
                 ?         //    And if the turn-counter is 0:
        ""                 //     Append nothing
      :                    //    Else (the turn-counter is larger than 0):
       "F"+(F=0))          //     Append that Fates was used (and make Fates inactive)
      ==""?-1:-1           //    Then set the turn-counter to -1 (none)
    :c<2?                  //   If the card was Moon instead:
      0*(w+=M.random()*3   //    Increase the wishes by 0-2 randomly
         -(t>0?            //    Then, if the turn-counter is larger than 0
            0              //     Leave the (0-based random) wishes the same
           :               //    Else:
            1))            //     Subtract 1 from the (0-based random) wishes
      -1                   //    Set the turn-counter to -1 (none)
    :c<4?                  //   If the card was Flames or Rogue instead:
      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
    :c<5?                  //   If the card was Skull instead:
        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
            +0*(F=0)?      //    (And set the Fates-flag to inactive)
         1                 //     Set the turn-counter to 1
        :                  //    Else:
         -1                //     Set the turn-counter to -1 (none)
    :c>19?                 //   If the card was Fool or Jester instead:
      t+(t>0*d--           //    Remove the Fool/Jester from the Deck
            *j++           //    And increase `j` (Fool/Jester) by 1
                ?          //    If the turn-counter was not 0 or -1 (none):
          j%2+1            //     Increase either by 1 (Fool) or 2 (Jester)
         :                 //    Else:
          0)               //     Leave the turn-counter the same by increasing with 0
    :                      //   Else:
     t;                    //    Leave the turn-counter unchanged
    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)(M.random()*3)%2;}
                           //    And set the wishes used flag to one of (0,0,1)
    i-=c==5?               //   If the card drawn was Idiot:
        M.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

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);Neden durdu?
FrownyFrog

@FrownyFrog Teşekkürler! Şimdi düzeltilmelidir. Başka hataları tespit ederseniz bana bildirin. :)
Kevin Cruijssen

0

Kotlin , 1173 bayt

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

O da çalıştırılabilir. - Çevrimiçi deneyin!

Muhtemelen çok fazla hata var ... yorumlarda bana bildirin!


Sonsuz döngü baskı Foolveya Jester.
FrownyFrog
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.