Vẽ 'Cho đến khi bạn thả


17

Trong phiên bản thứ 5 của Dungeons & Dragons (cũng như hầu hết các phiên bản khác), tồn tại một vật phẩm ma thuật gọi là Bộ bài nhiều thứ . Nó là một vật phẩm cực kỳ mạnh mẽ, vì tất cả các thẻ đều có tác động tích cực hoặc tiêu cực rất mạnh. Để sử dụng bộ bài, một nhân vật khai báo một số, và sau đó rút ra số lượng thẻ đó, với các hiệu ứng được áp dụng theo trình tự. Nếu nhân vật không rút được tất cả các thẻ mà họ đã khai báo và đã ít nhất 1 giờ kể từ khi thẻ cuối cùng được rút ra, các thẻ còn lại sẽ tự động được rút ra cho họ và các hiệu ứng được áp dụng. Sau khi mỗi thẻ được rút ra, nó được đưa trở lại bộ bài, và bộ bài được xáo trộn.

Sau đây là danh sách các hiệu ứng vẽ từng thẻ 1 :

  • Cân bằng : Tâm trí của bạn chịu một sự thay đổi đau khổ, khiến sự liên kết của bạn thay đổi. Lawful trở nên hỗn loạn, tốt trở thành xấu xa và ngược lại. Nếu bạn là trung lập thực sự hoặc không được phân bổ, thẻ này không có hiệu lực đối với bạn.
  • Sao chổi : Nếu bạn một tay đánh bại quái vật thù địch hoặc nhóm quái vật tiếp theo bạn gặp phải, bạn có được điểm kinh nghiệm đủ để đạt được một cấp. Nếu không, thẻ này không có hiệu lực.
  • Donjon : Bạn biến mất và bị giam cầm trong trạng thái hoạt hình lơ lửng trong một quả cầu mở rộng. Tất cả mọi thứ bạn đang mặc và mang ở lại phía sau trong không gian bạn chiếm giữ khi bạn biến mất. Bạn vẫn bị giam cầm cho đến khi bạn được tìm thấy và loại bỏ khỏi quả cầu. Bạn không thể được định vị bởi bất kỳ phép thuật bói toán nào, nhưng một câu thần chú mong muốn có thể tiết lộ vị trí nhà tù của bạn. Bạn không rút thêm thẻ.
  • Euryale . Tấm gương giống như tấm thiệp của Medusa nguyền rủa bạn. Bạn bị phạt -2 khi lưu ném trong khi bị nguyền rủa theo cách này. Chỉ có một vị thần hoặc phép thuật của lá bài The Fates mới có thể chấm dứt lời nguyền này.
  • The Fates : Reality 'vải làm sáng tỏ và quay trở lại, cho phép bạn tránh hoặc xóa một sự kiện như thể nó không bao giờ xảy ra. Bạn có thể sử dụng phép thuật của thẻ ngay khi bạn rút thẻ hoặc bất cứ lúc nào trước khi bạn chết.
  • Ngọn lửa : Một con quỷ mạnh mẽ trở thành kẻ thù của bạn. Ma quỷ tìm kiếm sự hủy hoại của bạn và làm khổ cuộc sống của bạn, thưởng thức sự đau khổ của bạn trước khi cố gắng giết bạn. Sự thù hận này kéo dài cho đến khi bạn hoặc ma quỷ chết.
  • Lừa : Bạn mất 10.000 XP, loại bỏ thẻ này và rút lại từ cỗ bài, tính cả hai lần rút là một trong những lần rút của bạn. Nếu mất nhiều XP sẽ khiến bạn mất một cấp, thay vào đó bạn sẽ mất một số tiền khiến bạn chỉ còn đủ XP để giữ cấp.
  • Đá quý : Hai mươi lăm mảnh trang sức trị giá 2.000 gp mỗi hoặc năm mươi viên đá quý trị giá 1.000 gp mỗi viên xuất hiện dưới chân bạn.
  • Kẻ ngốc : Giảm vĩnh viễn Trí thông minh của bạn xuống 1d4 + 1 (xuống điểm tối thiểu là 1). Bạn có thể rút thêm một thẻ ngoài số lần rút của bạn.
  • Jester : Bạn nhận được 10.000 XP, hoặc bạn có thể rút thêm hai thẻ ngoài số lần rút của bạn. Hủy thẻ này sau khi vẽ nó.
  • Chìa khóa : Một vũ khí ma thuật hiếm hoặc hiếm hơn mà bạn thành thạo xuất hiện trong tay. GM chọn vũ khí.
  • Hiệp sĩ : Bạn có được sự phục vụ của một chiến binh cấp 4 xuất hiện trong một không gian bạn chọn trong vòng 30 feet từ bạn. Máy bay chiến đấu cùng chủng tộc với bạn và phục vụ bạn trung thành cho đến khi chết, tin rằng số phận đã lôi kéo anh ta hoặc cô ta đến với bạn. Bạn điều khiển nhân vật này.
  • Mặt trăng : Bạn được cấp khả năng sử dụng phép thuật mong muốn 1d3 lần.
  • Rogue : Một nhân vật không phải là người chơi của sự lựa chọn của GM trở nên thù địch với bạn. Danh tính của kẻ thù mới của bạn không được biết cho đến khi NPC hoặc người khác tiết lộ. Không có gì khác hơn một câu thần chú mong muốn hoặc sự can thiệp của thần thánh có thể chấm dứt sự thù địch của NPC đối với bạn.
  • Hủy hoại : Tất cả các dạng của cải mà bạn mang theo hoặc sở hữu, ngoài các vật phẩm ma thuật, đều bị mất đối với bạn. Tài sản di động biến mất. Các doanh nghiệp, tòa nhà và vùng đất bạn sở hữu bị mất theo cách làm thay đổi thực tế ít nhất. Bất kỳ tài liệu nào chứng minh bạn nên sở hữu thứ gì đó bị mất trong thẻ này cũng sẽ biến mất.
  • Sọ . Bạn triệu tập một hình đại diện của cái chết - một bộ xương người hình người ma quái mặc áo choàng đen rách nát và mang theo lưỡi hái quang phổ. Nó xuất hiện trong một không gian của sự lựa chọn của GM trong vòng 10 feet và tấn công bạn, cảnh báo tất cả những người khác rằng bạn phải chiến thắng trận chiến một mình. Hình đại diện chiến đấu cho đến khi bạn chết hoặc nó giảm xuống 0 điểm, sau đó nó biến mất. Nếu bất cứ ai cố gắng giúp bạn, người trợ giúp triệu tập avatar của chính họ. Một sinh vật bị giết bởi hình đại diện của cái chết không thể khôi phục lại sự sống.
  • Ngôi sao : Tăng một trong số điểm khả năng của bạn lên 2. Điểm có thể vượt quá 20 nhưng không thể vượt quá 24.
  • Sun : Bạn nhận được 50.000 XP và một vật phẩm kỳ diệu (mà GM xác định ngẫu nhiên) xuất hiện trong tay bạn.
  • Talons : Mỗi vật phẩm ma thuật bạn mặc hoặc mang theo tan rã. Cổ vật trong sở hữu của bạn không bị phá hủy nhưng biến mất.
  • Ngai vàng : Bạn đạt được sự thành thạo trong kỹ năng Thuyết phục và bạn nhân đôi số tiền thưởng thành thạo cho các séc được thực hiện với kỹ năng đó. Ngoài ra, bạn có được quyền sở hữu hợp pháp của một tổ chức nhỏ ở đâu đó trên thế giới. Tuy nhiên, việc giữ hiện đang nằm trong tay của quái vật, bạn phải dọn sạch trước khi bạn có thể yêu cầu giữ lại như của bạn.
  • Vizier : Bất cứ lúc nào bạn chọn trong vòng một năm kể từ khi rút thẻ này, bạn có thể đặt câu hỏi trong thiền định và nhận được một câu trả lời trung thực cho câu hỏi đó. Bên cạnh thông tin, câu trả lời giúp bạn giải quyết một vấn đề khó hiểu hoặc tình huống khó xử khác. Nói cách khác, kiến ​​thức đi kèm với sự khôn ngoan về cách áp dụng nó.
  • The Void : Thẻ đen này đánh vần thảm họa. Linh hồn của bạn được rút ra từ cơ thể của bạn và được chứa trong một vật thể ở nơi mà GM lựa chọn. Một hoặc nhiều sinh vật mạnh mẽ bảo vệ nơi này. Trong khi linh hồn của bạn bị mắc kẹt theo cách này, cơ thể bạn bị mất khả năng. Một câu thần chú mong muốn không thể khôi phục tâm hồn bạn, nhưng câu thần chú cho thấy vị trí của vật giữ nó. Bạn không rút thêm thẻ.

(mô tả thẻ được sao chép từ SRD phiên bản 5 của D & D )

Một số người chơi đặc biệt ngu ngốc sẽ rút một số lượng lớn thẻ cùng một lúc, hy vọng sẽ có được ít nhất một lợi ích mạnh mẽ để cân bằng các thẻ bất lợi. Như người ta có thể mong đợi, điều này thường dẫn đến cái chết của nhân vật hoặc không có khả năng tiếp tục rút thẻ.

Các thách thức

Mô phỏng bản vẽ lặp đi lặp lại từ Bộ bài gồm nhiều thẻ gồm 22 thẻ , xuất ra mỗi thẻ được rút ra, chỉ dừng lại khi đáp ứng một trong các điều kiện sau:

  • Nhân vật chết (thông qua việc vẽ Skull , hoặc rút 5 lá bài sau khi vẽ Flames hoặc Rogue , mà không có lợi ích của The Fates hoặc Moon active 2 ).
  • Nhân vật không có khả năng rút thêm thẻ bài (thông qua các hiệu ứng của Donjon , Talons , The Void 3 hoặc điểm Thông minh của nhân vật giảm xuống 3 hoặc thấp hơn qua Idiot 4 ).

Quy tắc

  • Căn chỉnh, cấp độ, XP và tài sản của nhân vật không phải là bộ bài không quan trọng.
  • Điểm thông minh của nhân vật bắt đầu từ 10.
  • Không có giới hạn tối đa cho Trí thông minh của nhân vật hoặc cách sử dụng mong muốn được dự trữ của họ .
  • Công dụng của Số phận không chồng chất.
  • Các mong muốn chính tả có-1-in 3 cơ hội gây ra nhân vật không bao giờ có thể sử dụng những mong muốn chính tả một lần nữa, ngoài việc ảnh hưởng thường xuyên của nó. Nếu điều này xảy ra, nhân vật không còn có thể sử dụng phép thuật để phủ nhận Flames , Rogue hoặc Skull - sức mạnh của The Fates là cách duy nhất của họ.
  • Nhân vật luôn đưa ra các lựa chọn sau:
    • Số phậnMặt trăng chỉ được sử dụng để đưa nhân vật thoát khỏi rắc rối từ Skull , FlamesRogue . Nhân vật sẽ không bao giờ sử dụng chúng để đảo ngược hiệu ứng của Talons hoặc phép thuật mong muốn không thể được sử dụng lại và không thể sử dụng chúng để đảo ngược hiệu ứng của DonjonThe Void . Nhân vật sẽ ngay lập tức sử dụng một mong muốn chính tả để phủ nhận những ảnh hưởng của Skull , Flames , hoặc Rogue khi vẽ một trong số họ, và nó sẽ luôn luôn thành công. Nhân vật sẽ luôn sử dụng Số phận trước khi sử dụngRất mong .
    • Nhân vật luôn chọn cách rút thêm thẻ bài với hiệu ứng của IdiotJester (một cách thích hợp).
    • Hiệu ứng của Star luôn được sử dụng để tăng Trí thông minh lên 2, để tránh phải dừng việc rút thẻ thông qua hiệu ứng của Ngốc .
  • Đồng minh NPC được Hiệp sĩ triệu tập không đủ mạnh để cứu nhân vật khỏi sự sụp đổ không tưởng của họ.
  • Bất kỳ sự tăng hay giảm nào đối với Trí thông minh (thông qua Sao hoặc Ngốc , tương ứng) phải được phản ánh trong đầu ra (bằng cách lưu ý thay đổi ( +2hoặc -(1d4+1)) hoặc bằng cách xuất điểm Thông minh hiện tại sau khi hiệu ứng diễn ra).
  • Mọi thay đổi về số lượng sử dụng mong muốn mà nhân vật đã dự trữ phải được phản ánh tương tự trong đầu ra, bao gồm cả một điều ước khiến nhân vật không thể sử dụng điều ước nữa.
  • Tất cả các lựa chọn ngẫu nhiên là từ phân phối rời rạc thống nhất.
  • Bạn có thể chọn bất kỳ bộ 22 đầu ra riêng biệt nào cho đầu ra cho các thẻ được rút ra - không phải sử dụng tên của thẻ.
  • Bạn có thể thay đổi sản lượng trong Intelligence, mong muốn sử dụng, và mong muốn trở thành không sử dụng được ở bất kỳ quán, cách rõ ràng mà bạn chọn.
  • Nhân vật có thể sử dụng điều ước hoặc sức mạnh của The Fates để tránh cái chết nếu lá bài thích hợp được rút ra là lá bài thứ năm sau khi vẽ Rogue hoặc Flames . Chỉ khi điều ước không thể sử dụng được hoặc tất cả các mục đích sử dụng đã được sử dụng, cũng như Số phận không được rút ra kịp thời hoặc đã được sử dụng, nhân vật sẽ chết.
  • FoolJester bị loại bỏ sau khi chúng được rút ra. Tất cả các thẻ khác ngay lập tức được trả lại cho bộ bài, và bộ bài sau đó được xáo trộn.
  • Nếu có nhiều ngăn xếp Rogue và / hoặc Flame hoạt động, chỉ một lần sử dụng The Fates hoặc wish là cần thiết để xua tan tất cả chúng.
  • Vẽ nhiều thẻ cùng một lúc thông qua Jester hoặc Fool không cải tiến bộ đếm lần lượt trên Flames và / hoặc Rogue .

Ví dụ

Mỗi dòng đại diện cho một chuỗi các trận hòa. Thay đổi đối với Thông minh và sử dụng mong muốn được hiển thị bằng giá trị hiện tại trong ngoặc đơn. Bên Ccạnh một điều ước sử dụng biểu thị rằng điều ước đó không thể được sử dụng nữa. Một Fbiểu thị rằng sức mạnh của The Fates đã được sử dụng để tránh cái chết. Nhận xét bổ sung được cung cấp cho mục đích giải thích, dưới dạng nhận xét kiểu 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

Thực hiện tham khảo

#!/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]: Về mặt kỹ thuật, có hai biến thể: một có 13 thẻ và một có 22 thẻ. Chúng tôi chỉ quan tâm đến phiên bản 22 thẻ đầy đủ ở đây.

[2]: FlameRogue thường không hoàn toàn giết chết nhân vật, nhưng NPC thù địch được cho là đã tìm thấy và giết chết nhân vật ngu ngốc sau khi họ có thời gian rút thêm 5 lá bài. Bóng ma được triệu tập bởi Skull là vô cùng khó khăn để chiến đấu, và nó cho rằng nhân vật không chiến thắng. Chỉ có sự can thiệp thần thánh / ma thuật thông qua The Fates hoặc Moon mới có thể cứu nhân vật ngốc nghếch khỏi cái chết của họ bằng 3 lá bài này.

[3]: Chúng tôi cho rằng bạn bè của nhân vật đủ thông minh để không cố gắng giải cứu nhân vật và cho phép họ rút thêm thẻ.

[4]: Điểm số Thông minh 3 tương đương với một động vật hoang dã, chúng sẽ không thể chủ động lựa chọn rút thẻ.



Có thể tốt để bao gồm một số ví dụ khác chạy trong đó a) năm lượt hết hạn, lý tưởng nhất là với một số thẻ thưởng được rút ra ở giữa, b) số phận được rút ra hai lần, có và không sử dụng nó ở giữa.
Martin Ender

Việc triển khai tham chiếu của bạn không để điều ước hết hạn nếu nó được sử dụng vào thời điểm Mặt trăng được vẽ. Và nó cũng không kiểm tra xem họ đã hết hạn chưa.
Martin Ender

Một điều nữa: các quy tắc D & D ban đầu đề cập đến các thẻ bổ sung cho tất cả Idiot, Fool và Jester. Trước tiên, quy tắc của bạn nói rằng người chơi rút thêm thẻ cho Idiot và Jester nhưng sau đó làm rõ bộ đếm quy tắc cho Fool và Jester, và việc triển khai tham chiếu của bạn dường như chỉ rút thêm thẻ cho Fool và Jester. Bạn có thể làm rõ / sửa lỗi này?
Martin Ender

2
@steenbergh Lúc đầu tôi cũng đọc qua nó, nhưng " Sau mỗi lần rút thẻ, nó được đưa trở lại bộ bài, và bộ bài bị xáo trộn. " Chỉ Fool và Jester sẽ bị xóa khi rút, mọi thứ khác được đặt lại trong cỗ bài và được xáo trộn lại mỗi lần trước khi rút thẻ mới.
Kevin Cruijssen

Câu trả lời:


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

Bị đánh cắp

Giải thích về đầu ra

Thẻ có phạm vi từ 0-21 như sau:

  • 0: Số phận
  • 1: Lừa
  • 2: Jester
  • 3: Sọ
  • 4: Donjon
  • 5: Vô hiệu
  • 6: Talon
  • 7: Ngọn lửa
  • 8: Rogue
  • 9: Mặt trăng
  • 10: Đồ ngốc
  • 11: Sao
  • 12 mặc dù 21: Sun, Throne, Key, Knight, Ruin, Euryale, Vizier, Comet, Gem, Balance

Một sự đảo ngược của Skull, Flames hoặc Rogue thông qua The Fates được ký hiệu là a 0.


JavaScript (ES6), 792 byte

Phiên bản trước sử dụng tên thẻ, trước khi tôi phát hiện ra rằng bất kỳ 22 đầu ra riêng biệt nào đều được phép.

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)

Bị đánh cắp


2
@Mego thành thật, tôi đã không thực sự hiểu nó cũng như tôi nên cho đến khi thấy câu trả lời này, đã được thực hiện tốt; dễ hiểu khi nhìn thấy tên đầy đủ. Nếu bạn thay đổi, bạn có thể giữ một phiên bản với tên đầy đủ không?
Bạch tuộc ma thuật Urn

@MagicOctopusUrn Chắc chắn, tôi chắc chắn sẽ giữ nguyên phiên bản tên đầy đủ hiện tại trong tương lai.
darrylyeo

@Mego nó được đạo diễn tại OP và chỉ nói rằng "phiên bản với tên thẻ thực sự được đánh vần đầy đủ giúp cho việc triển khai này trở nên dễ đọc. Nếu bạn tắt byte, hãy giữ nguyên cái này, được dán nhãn là 'vô dụng'".
Bạch tuộc ma thuật Urn

@MagicOctopusUrn Cập nhật.
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}}}

Nó cũng có thể chạy được. - Hãy thử trực tuyến!

Có lẽ có rất nhiều lỗi ... hãy cho tôi biết trong các bình luận!


In vòng lặp vô hạn Foolhoặc 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;}}

Chuyển việc triển khai tham chiếu Python3 trong Java và sau đó đánh gôn xuống. Chắc chắn có thể chơi golf nhiều hơn, nhưng đây chỉ là phiên bản ban đầu để đảm bảo tôi đã làm mọi thứ chính xác.

Nếu bất cứ ai phát hiện ra bất kỳ sai lầm nào ( điều đó sẽ không làm tôi ngạc nhiên nếu có bất kỳ EDIT nào : Đã sửa như bảy hoặc tám lỗi kể từ khi tôi đăng bài này ..), vui lòng cho tôi biết.

Đầu ra thẻ:

0: Số phận
1: Mặt trăng
2: Ngọn lửa
3: Rogue
4: Skull
5: Kẻ ngốc
6: Ngôi sao
7/ 8/ 9: Donjon / Void / Talons
20/ 21: Fool / Jester

10-19: mọi thứ khác (Sun / Throne / Key / Knight / Ruin / Euryale / Vizier / Comet / Gem / Balance)

Định dạng đầu ra cho các điều ước trái, điều ước được sử dụng, thông minh còn lại và cờ được sử dụng:

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

Giải trình:

Hãy thử ở đây hoặc Thử ở đây với đầu ra được in đẹp .

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);Tại sao nó dừng lại?
FrownyFrog

@FrownyFrog Cảm ơn! Nên sửa ngay. Nếu bạn phát hiện ra bất kỳ sai lầm khác, cho tôi biết. :)
Kevin Cruijssen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.