วาด 'จนกว่าคุณจะวาง


17

ในดิน & มังกรรุ่นที่ 5 (เช่นเดียวกับรุ่นอื่น ๆ ส่วนใหญ่) มีอยู่รายการมายากลที่เรียกว่าเด็คในหลายสิ่ง มันเป็นไอเท็มทรงพลังอย่างไม่น่าเชื่อเนื่องจากการ์ดทั้งหมดมีเอฟเฟกต์บวกหรือลบที่แรงมาก ในการใช้สำรับตัวละครจะประกาศตัวเลขแล้วดึงจำนวนการ์ดขึ้นมาโดยใช้เอฟเฟกต์ตามลำดับ หากตัวละครไม่ได้ดึงไพ่ทั้งหมดที่พวกเขาประกาศและใช้เวลาอย่างน้อย 1 ชั่วโมงนับตั้งแต่ที่ดึงไพ่ใบสุดท้ายออกมาไพ่ที่เหลือจะถูกดึงออกมาโดยอัตโนมัติ หลังจากดึงไพ่แต่ละใบแล้วมันจะถูกส่งกลับไปที่เด็คและเด็คจะถูกสับ

ต่อไปนี้เป็นรายการของเอฟเฟกต์การวาดแต่ละการ์ด1 :

  • ยอดคงเหลือ : จิตใจของคุณมีปัญหาการเปลี่ยนแปลงอย่างรุนแรงทำให้การจัดตำแหน่งของคุณเปลี่ยนไป ถูกต้องตามกฎหมายจะกลายเป็นความวุ่นวายความดีกลายเป็นความชั่วร้ายและในทางกลับกัน หากคุณเป็นกลางหรือไม่ได้ลงนามจริงการ์ดใบนี้จะไม่มีผลต่อคุณ
  • ดาวหาง : หากคุณเอาชนะสัตว์ประหลาดศัตรูตัวต่อไปหรือกลุ่มสัตว์ประหลาดที่คุณพบเจอด้วยตนเองเพียงลำพังคุณจะได้รับคะแนนประสบการณ์มากพอที่จะได้รับหนึ่งระดับ มิฉะนั้นการ์ดใบนี้จะไม่มีผล
  • Donjon : คุณหายตัวไปและถูกฝังอยู่ในสภาพของอนิเมชั่นที่ถูกระงับในรูปทรงต่างมิติ ทุกสิ่งที่คุณสวมใส่และถืออยู่ข้างหลังในพื้นที่ที่คุณครอบครองเมื่อคุณหายไป คุณยังคงถูกคุมขังจนกว่าคุณจะถูกค้นพบและนำออกจากทรงกลม คุณไม่สามารถอยู่ได้ด้วยเวทมนตร์แห่งการทำนาย แต่คาถาที่ต้องการสามารถเปิดเผยที่ตั้งของคุกของคุณ คุณไม่ต้องจั่วไพ่เพิ่มอีก
  • Euryale หน้าตาคล้ายแมงกะพรุนของการ์ดสาปแช่งคุณ คุณได้รับโทษ -2 จากการโยนโทษในขณะที่ถูกสาปด้วยวิธีนี้ มีเพียงเทพเจ้าหรือเวทย์มนตร์ของการ์ดเดอะเฟทที่สามารถจบคำสาปนี้ได้
  • The Fates : เนื้อผ้าของความเป็นจริงคลี่คลายและหมุนใหม่ช่วยให้คุณหลีกเลี่ยงหรือลบเหตุการณ์หนึ่งราวกับว่ามันไม่เคยเกิดขึ้น คุณสามารถใช้เวทย์มนตร์ของการ์ดทันทีที่คุณจั่วการ์ดหรือในเวลาอื่น ๆ ก่อนที่คุณจะตาย
  • เปลวไฟ : ปีศาจที่ทรงพลังกลายเป็นศัตรูของคุณ มารแสวงหาความพินาศและภัยพิบัติชีวิตของคุณลิ้มรสความทุกข์ทรมานของคุณก่อนที่จะพยายามฆ่าคุณ ศัตรูนี้คงอยู่จนกว่าคุณหรือปีศาจจะตาย
  • Fool : คุณสูญเสีย 10,000 XP, ทิ้งการ์ดนี้และดึงออกจากเด็คอีกครั้งโดยนับการจับคู่ทั้งสองเป็นหนึ่งในการจับรางวัลของคุณ หากการสูญเสีย XP มากนั้นจะทำให้คุณเสียระดับคุณจะสูญเสียจำนวนที่ทำให้คุณมี XP เพียงพอที่จะรักษาระดับของคุณไว้
  • อัญมณี : เครื่องประดับยี่สิบห้าชิ้นมีมูลค่า 2,000 กรัมต่อชิ้นหรือห้าสิบอัญมณีมูลค่า 1,000 กรัมแต่ละชิ้นปรากฏที่หน้าเท้าของคุณ
  • Idiot : ลด Intelligence อย่างถาวรโดย 1d4 + 1 (ไปยังคะแนนขั้นต่ำ 1) คุณสามารถจั่วไพ่เพิ่มอีกหนึ่งใบนอกเหนือจากการจับรางวัล
  • Jester : คุณได้รับ 10,000 XP หรือคุณสามารถจั่วการ์ดเพิ่มเติมสองใบนอกเหนือจากการประกาศผล ทิ้งการ์ดนี้หลังจากวาดรูปแล้ว
  • คีย์ : อาวุธเวทมนตร์ที่หายากหรือหายากซึ่งคุณมีความเชี่ยวชาญปรากฏในมือของคุณ จีเอ็มเลือกอาวุธ
  • Knight : คุณได้รับการบริการของนักสู้ระดับ 4 ที่ปรากฏในพื้นที่ที่คุณเลือกภายในระยะ 30 ฟุตของคุณ นักสู้เป็นเผ่าพันธุ์เดียวกันกับคุณและให้บริการคุณอย่างซื่อสัตย์จนตายเชื่อว่าชะตากรรมได้ดึงดูดเขาหรือเธอมาหาคุณ คุณสามารถควบคุมตัวละครนี้
  • Moon : คุณได้รับความสามารถในการร่ายเวทย์มนตร์ 1d3 ครั้ง
  • Rogue : ตัวละครที่ไม่ใช่ตัวเลือกของ GM กลายเป็นศัตรูกับคุณ ตัวตนของศัตรูใหม่ของคุณยังไม่เป็นที่รู้จักจนกระทั่ง NPC หรือคนอื่นเปิดเผย ไม่มีอะไรน้อยไปกว่าคาถาที่ต้องการหรือการแทรกแซงจากสวรรค์สามารถยุติความเป็นศัตรูของ NPC ที่มีต่อคุณ
  • Ruin : ทรัพย์สมบัติทุกรูปแบบที่คุณถือหรือเป็นเจ้าของนอกเหนือจากของวิเศษจะหายไปจากคุณ ทรัพย์สินแบบพกพาหายไป ธุรกิจอาคารและที่ดินที่คุณเป็นเจ้าของนั้นสูญเสียไปในทางที่เปลี่ยนแปลงความเป็นจริงให้น้อยที่สุด เอกสารใด ๆ ที่พิสูจน์ว่าคุณควรเป็นเจ้าของสิ่งที่หายไปในการ์ดนี้ก็หายไปเช่นกัน
  • กะโหลกศีรษะ คุณอัญเชิญอวตารแห่งความตาย - โครงกระดูกมนุษย์รูปร่างคล้ายผีในชุดคลุมสีดำที่ขาดรุ่งริ่งและถือเคียวสเปคตรัม มันจะปรากฏขึ้นในพื้นที่ของทางเลือกของ GM ภายในระยะ 10 ฟุตของคุณและโจมตีคุณเตือนคนอื่น ๆ ว่าคุณต้องชนะการต่อสู้เพียงลำพัง อวตารจะต่อสู้จนกว่าคุณจะตายหรือมันลดลงไปเป็นพลังชีวิต 0 แต้มดังนั้นมันจะหายไป หากใครก็ตามที่พยายามช่วยคุณผู้ช่วยเรียกสัญลักษณ์แทนความตายของตัวเอง สิ่งมีชีวิตที่ถูกสังหารด้วยอวตารแห่งความตายจะไม่สามารถฟื้นคืนชีพได้
  • ดาว : เพิ่มคะแนนความสามารถของคุณหนึ่งโดย 2 คะแนนสามารถเกิน 20 แต่ไม่เกิน 24
  • อา : คุณได้รับ 50,000 XP และรายการมหัศจรรย์ (ซึ่ง GM กำหนดแบบสุ่ม) ปรากฏขึ้นในมือคุณ
  • กรงเล็บ : ไอเท็มเวทย์มนตร์ทุกชิ้นที่คุณสวมใส่ สิ่งประดิษฐ์ที่คุณครอบครองไม่ได้ถูกทำลาย แต่ก็หายไป
  • บัลลังก์ : คุณได้รับความเชี่ยวชาญในทักษะการโน้มน้าวใจและคุณเพิ่มโบนัสความสามารถของคุณเป็นสองเท่าในการตรวจสอบที่ทำด้วยทักษะนั้น นอกจากนี้คุณยังได้รับกรรมสิทธิ์ที่ถูกต้องของที่เก็บใบเล็ก ๆ แห่งหนึ่งในโลก อย่างไรก็ตามการเก็บรักษาอยู่ในมือของสัตว์ประหลาดซึ่งคุณต้องล้างออกก่อนที่คุณจะสามารถเรียกร้องการรักษาเป็นของคุณ
  • ท่านราชมนตรี : เมื่อใดก็ตามที่คุณเลือกภายในหนึ่งปีของการวาดภาพการ์ดใบนี้คุณสามารถถามคำถามในการทำสมาธิและจิตใจได้รับคำตอบที่แท้จริงสำหรับคำถามนั้น นอกจากข้อมูลแล้วคำตอบยังช่วยให้คุณแก้ปัญหาที่ทำให้งงงวยหรือปัญหาอื่น ๆ กล่าวอีกนัยหนึ่งความรู้มาพร้อมกับภูมิปัญญาในการใช้งาน
  • The Void : การ์ดสีดำนี้จะทำให้เกิดหายนะ จิตวิญญาณของคุณถูกดึงออกมาจากร่างกายของคุณและบรรจุอยู่ในวัตถุในสถานที่ที่จีเอ็มเลือก สิ่งมีชีวิตที่ทรงพลังหนึ่งตัวหรือมากกว่าปกป้องสถานที่ ในขณะที่วิญญาณของคุณถูกขังอยู่ในลักษณะนี้ร่างกายของคุณจะไร้ความสามารถ คาถาที่ต้องการไม่สามารถฟื้นฟูจิตวิญญาณของคุณได้ แต่คาถาจะเผยตำแหน่งของวัตถุที่ถืออยู่ คุณไม่ต้องจั่วไพ่เพิ่มอีก

(คัดลอกคำอธิบายการ์ดจากD&D รุ่นที่ 5 SRD )

โดยเฉพาะอย่างยิ่งผู้เล่นที่โง่เขลาจะจั่วไพ่จำนวนมากในคราวเดียวโดยหวังว่าจะได้รับผลประโยชน์อย่างน้อยหนึ่งอันเพื่อสร้างความเสียหายให้กับการ์ดที่เป็นอันตราย ตามที่คาดไว้สิ่งนี้มักส่งผลให้ตัวละครตายหรือไม่สามารถจั่วไพ่ต่อไปได้

ความท้าทาย

จำลองการวาดภาพซ้ำ ๆ จากสำรับไพ่ 22 ใบในสิ่งต่าง ๆ จำนวนมากแสดงผลการจั่วไพ่แต่ละใบหยุดเฉพาะเมื่อตรงตามเงื่อนไขข้อใดข้อหนึ่งต่อไปนี้:

  • ตัวละครตาย (ผ่านการวาดSkullหรือการวาดไพ่ 5 ใบหลังจากวาดFlamesหรือRogueโดยไม่มีผลประโยชน์จากThe FatesหรือMoon ที่ใช้งานอยู่2 )
  • ตัวละครไม่สามารถวาดการ์ดได้มากขึ้น (ผ่านเอฟเฟกต์ของDonjon , Talons , The Void 3หรือคะแนนความฉลาดของตัวละครลดลงเหลือ 3 หรือต่ำกว่าผ่านIdiot 4 )

กฎระเบียบ

  • การจัดตำแหน่งระดับ XP และสมบัติอื่น ๆ นอกเหนือจากเด็คของตัวละครนั้นไม่สำคัญ
  • คะแนนอัจฉริยะของตัวละครเริ่มต้นที่ 10
  • ไม่มีขีด จำกัด สูงสุดให้กับหน่วยสืบราชการลับของตัวละครหรือการใช้กักตุนของพวกเขาเป็นความปรารถนา
  • การใช้โชคชะตาไม่ซ้อนกัน
  • ปรารถนาสะกดมีโอกาส 1 ใน 3 ของสาเหตุที่ทำให้ตัวละครจะไม่สามารถที่จะใช้ความปรารถนาสะกดอีกครั้งนอกเหนือไปจากผลปกติ หากเกิดกรณีนี้ตัวละครจะไม่สามารถใช้การสะกดจะลบล้างเปลวไฟ , Rogueหรือกะโหลก - อำนาจของกรรมคือการขอความช่วยเหลือของพวกเขาเท่านั้น
  • ตัวละครทำให้ตัวเลือกต่อไปนี้:
    • ชะตากรรมและดวงจันทร์จะใช้ แต่เพียงผู้เดียวที่จะได้รับตัวละครออกจากปัญหาจากกะโหลกศีรษะ , เปลวไฟและRogue ตัวละครจะไม่เคยใช้พวกเขาที่จะย้อนกลับผลของการกรงเล็บหรือปรารถนาสะกดไม่สามารถที่จะถูกโยนอีกครั้งและไม่สามารถใช้พวกเขาเพื่อย้อนกลับผลของหอคอยและความว่างเปล่า ตัวละครจะใช้คาถาปรารถนาอย่างเดียวเพื่อลบล้างเอฟเฟกต์ของSkull , FlamesหรือRogueเมื่อวาดหนึ่งในนั้นและมันจะประสบความสำเร็จเสมอ ตัวละครจะใช้ชะตากรรมก่อนใช้เสมอความปรารถนา
    • ตัวละครมักเลือกที่จะจั่วไพ่มากขึ้นด้วยเอฟเฟกต์ของIdiotและJester (เหมาะสม)
    • ผลของดาวนั้นจะใช้เพื่อเพิ่ม Intelligence ตาม 2 เพื่อหลีกเลี่ยงการหยุดการวาดภาพบัตรผ่านทางผลกระทบของคนโง่
  • พันธมิตร NPC ที่ถูกเรียกโดยKnightนั้นไม่ทรงพลังพอที่จะช่วยตัวละครจากการตายก่อนวัยอันควร
  • การเพิ่มขึ้นหรือลดลงของหน่วยสืบราชการลับ (ผ่านStarหรือIdiotตามลำดับ) จะต้องสะท้อนให้เห็นในผลลัพธ์ (โดยการสังเกตการเปลี่ยนแปลง ( +2หรือ-(1d4+1)) หรือโดยการแสดงคะแนนหน่วยสืบราชการลับปัจจุบันหลังจากเกิดผล)
  • การเปลี่ยนแปลงใด ๆ กับจำนวนความปรารถนาใช้ตัวละครที่มีสต็อกจะต้องสะท้อนให้เห็นในทำนองเดียวกันในการส่งออกรวมถึงความปรารถนาที่ทำให้ตัวละครที่จะไม่สามารถใช้ความปรารถนาอีกต่อไป
  • การเลือกแบบสุ่มทั้งหมดมาจากการแจกแจงแบบไม่ต่อเนื่องสม่ำเสมอ
  • คุณสามารถเลือกเอาท์พุทที่แตกต่างกันถึง 22 ชุดสำหรับเอาไพ่ออก - ไม่ต้องใช้ชื่อของการ์ด
  • คุณสามารถส่งออกการเปลี่ยนแปลงในหน่วยสืบราชการลับต้องการใช้และต้องการใช้ไม่ได้ในลักษณะที่สอดคล้องและไม่คลุมเครือในการเลือกของคุณ
  • ตัวละครอาจจะใช้ความปรารถนาหรืออำนาจของชะตากรรมที่จะหลีกเลี่ยงความตายถ้าบัตรที่เหมาะสมจะถูกดึงมาเป็นบัตรที่ห้าหลังจากวาดRogueหรือเปลวไฟ เฉพาะในกรณีที่ความต้องการนั้นใช้ไม่ได้หรือการใช้งานทั้งหมดถูกนำมาใช้เช่นเดียวกับชะตากรรมที่ไม่ได้ถูกดึงออกมาในเวลาหรือถูกใช้ไปแล้วตัวละครจะตาย
  • FoolและJesterถูกยกเลิกหลังจากวาดเสร็จแล้ว ไพ่อื่น ๆ ทั้งหมดจะถูกส่งกลับไปที่เด็คทันทีและเด็คนั้นจะถูกสับ
  • หากมีRogueและ / หรือFlame ที่ใช้งานอยู่หลายกองจำเป็นต้องใช้The Fatesหรือความปรารถนาเพียงอย่างเดียวในการกำจัดพวกมันทั้งหมด
  • วาดบัตรหลายครั้งผ่านทางตัวตลกหรือคนโง่ไม่ก้าวหน้าเคาน์เตอร์เปิดบนเปลวไฟและ / หรือRogue

ตัวอย่าง

แต่ละบรรทัดแสดงถึงลำดับการเสมอกัน การเปลี่ยนแปลงความฉลาดและความต้องการการใช้งานจะแสดงโดยค่าปัจจุบันในวงเล็บ Cถัดจากสินค้าที่ต้องการการใช้งานหมายถึงว่าความปรารถนาไม่สามารถนำมาใช้อีกต่อไป Fหมายถึงว่าอำนาจของชะตากรรมถูกใช้ในการหลีกเลี่ยงการเสียชีวิต ความคิดเห็นเพิ่มเติมมีให้เพื่อวัตถุประสงค์ในการอธิบายในรูปแบบของความคิดเห็นสไตล์หลาม

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

การดำเนินการอ้างอิง

#!/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]: ในทางเทคนิคมีสองสายพันธุ์: หนึ่งใบมี 13 ใบและอีกหนึ่งใบมี 22 ใบ เราเป็นห่วงเฉพาะเวอร์ชั่น 22- บัตรที่นี่เท่านั้น

[2]: FlameและRogueไม่ปกติฆ่าตัวละครได้ทันที แต่ NPC ที่เป็นศัตรูนั้นถูกพบและฆ่าตัวละครที่โง่เขลาหลังจากที่พวกเขามีเวลาในการจั่วไพ่เพิ่มอีก 5 ใบ ปีศาจที่อัญเชิญโดยSkull นั้นยากมากที่จะต่อสู้และสันนิษฐานว่าตัวละครนั้นจะไม่ชนะ มีเพียงการแทรกแซงจากสวรรค์ / เวทย์มนตร์ผ่านThe FatesหรือMoonเท่านั้นที่สามารถช่วยตัวละครโง่ ๆ จากการตายของพวกเขาด้วยไพ่ 3 ใบ

[3]: เราถือว่าเพื่อนของตัวละครฉลาดพอที่จะไม่พยายามช่วยเหลือตัวละครและอนุญาตให้พวกเขาวาดไพ่เพิ่ม

[4]: คะแนนเชาวน์ปัญญาที่ 3 นั้นเทียบเท่ากับสัตว์ป่าซึ่งไม่สามารถเลือกวาดไพ่ได้



อาจเป็นเรื่องที่ดีที่จะรวมตัวอย่างการวิ่งอีกที่ก) การหมุนห้าครั้งจะหมดอายุโดยมีการให้โบนัสการ์ดบางอย่างระหว่างข) ชะตากรรมจะถูกวาดสองครั้งโดยมีและไม่มีการใช้งานในระหว่างนั้น
Martin Ender

การใช้การอ้างอิงของคุณจะไม่ปล่อยให้ความปรารถนาหมดอายุถ้ามันถูกใช้ในช่วงเวลาที่ดวงจันทร์ถูกดึงออกมา และมันก็ไม่ได้ตรวจสอบว่ามันหมดอายุแล้วหรือยัง
Martin Ender

อีกอย่างหนึ่ง: กฎ D&D ต้นฉบับกล่าวถึงการ์ดเพิ่มเติมสำหรับ Idiot, Fool และ Jester ทั้งหมด กฎของคุณก่อนระบุว่าผู้เล่นดึงบัตรเพิ่มเติมสำหรับ Idiot และ Jester แต่จากนั้นให้ชี้แจงตัวนับกฎสำหรับ Fool และ Jester และการใช้การอ้างอิงของคุณดูเหมือนจะดึงเฉพาะบัตรเพิ่มเติมสำหรับ Fool และ Jester คุณช่วยอธิบาย / แก้ไขได้ไหม?
Martin Ender

2
@steenbergh ฉันอ่านมันตอนแรกด้วย แต่ " หลังจากดึงไพ่แต่ละใบแล้วมันก็กลับไปที่เด็คและสำรับถูกสับ " เฉพาะ Fool และ Jester เท่านั้นที่จะถูกนำออกเมื่อถูกดึงออกมาทุกอย่างจะถูกนำไปวางในสำรับอีกครั้งและปรับใหม่ทุกครั้งก่อนที่จะมีการดึงไพ่ใหม่
Kevin Cruijssen

คำตอบ:


4

JavaScript (ES6), 379 ไบต์

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

คำอธิบายของการส่งออก

การ์ดมีช่วง 0-21 ดังนี้:

  • 0: โชคชะตา
  • 1: คนโง่
  • 2: ตัวตลก
  • 3: Skull
  • 4: ดอนจอน
  • 5: ความว่างเปล่า
  • 6: กรงเล็บ
  • 7: เปลวไฟ
  • 8: Rogue
  • 9: ดวงจันทร์
  • 10: คนบ้า
  • 11: ดาว
  • 12 ถึง 21: ดวงอาทิตย์บัลลังก์คีย์อัศวินซากปรักหักพังยูริเทลขุนนางผู้ใหญ่ราชสมบัติดาวหางอัญมณียอดคงเหลือ

ความผกผันของกะโหลกเปลวไฟหรือ Rogue 0ผ่านชะตากรรมจะเขียนแทนด้วย


JavaScript (ES6), 792 ไบต์

รุ่นก่อนหน้าโดยใช้ชื่อการ์ดก่อนที่ฉันจะพบว่าอนุญาตให้ใช้เอาต์พุตที่แตกต่างกัน 22 รายการ

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
@ เล็กน้อยจริงๆฉันไม่ได้รับมันอย่างที่ฉันควรจะได้จนกว่าจะเห็นคำตอบนี้ก็ทำได้ดี; เข้าใจง่ายเมื่อเห็นชื่อเต็ม หากคุณเปลี่ยนคุณสามารถเก็บเวอร์ชันด้วยชื่อเต็มได้หรือไม่
Magic Octopus Urn

@MagicOctopusUrn แน่นอนฉันจะต้องแน่ใจว่าจะรักษาเวอร์ชันเต็มชื่อปัจจุบันในอนาคต
darrylyeo

@Mego มันถูกกำกับที่ OP และเพิ่งพูดว่า "เวอร์ชั่นที่มีชื่อการ์ดจริงที่สะกดทำให้การดำเนินการนี้ง่ายต่อการอ่านถ้าคุณโกนไบต์ให้เก็บอันนี้ไว้เหมือนกันว่า 'ungolfed'"
Magic Octopus Urn

@MagicOctopusUrn อัปเดตแล้ว
darrylyeo

0

Kotlin , 1173 ไบต์

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

มันวิ่งได้เหมือนกัน - ลองออนไลน์!

อาจมีข้อบกพร่องมากมาย ... แจ้งให้เราทราบในความคิดเห็น!


พิมพ์ห่วงอนันต์หรือFool Jester
FrownyFrog

0

Java 8, 481 480 ไบต์

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

จัดทำโพรซีเดอร์อ้างอิง Python3 ใน Java จากนั้นนำไปใช้ สามารถตีกอล์ฟได้มากกว่านี้แน่นอน แต่นี่เป็นเพียงเวอร์ชันเริ่มต้นเพื่อให้แน่ใจว่าฉันทำทุกอย่างถูกต้องแล้ว

หากใครพบข้อผิดพลาดใด ๆ ( มันจะไม่แปลกใจเลยถ้ามีแก้ไข : แก้ไขแล้วเช่นเจ็ดหรือแปดข้อผิดพลาดตั้งแต่ฉันโพสต์นี้ .. ) โปรดแจ้งให้เราทราบ

การ์ดออก:

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: ทุกสิ่งทุกอย่าง (อาทิตย์ / บัลลังก์ / คีย์ / อัศวิน / ซาก / Euryale / ท่านราชมนตรี / ดาวหาง / อัญมณี / สมดุล)

รูปแบบเอาต์พุตสำหรับความปรารถนาด้านซ้าย, ความปรารถนาที่ใช้, ปัญญาด้านซ้ายและการตั้งค่าสถานะที่ใช้:

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

คำอธิบาย:

ลองได้ที่นี่หรือลองได้ที่นี่กับการส่งออกสวยพิมพ์

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);ทำไมมันถึงหยุด
FrownyFrog

@ ฟรุตนี่ฟรอกขอบคุณ! ควรได้รับการแก้ไขแล้ว หากคุณพบข้อผิดพลาดอื่น ๆ แจ้งให้เราทราบ :)
Kevin Cruijssen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.