Chơi một trò chơi Dice Cricket


12

Dice Cricket là một trò chơi mà tôi được giới thiệu khi còn nhỏ và đã sử dụng như một cách để vượt qua thời gian trong nhiều năm kể từ đó. Tôi không thể tìm thấy một trang Wikipedia vì vậy tôi sẽ giải thích các quy tắc dưới đây.

Quy tắc Dice Cricket

Tiền đề

Dice Cricket là một trò chơi tương tự như ghi một trò chơi cricket khi bạn xem nó nhưng thay vì xem và ghi lại kết quả, bạn đang lăn một cái chết và ghi lại kết quả.

Các kết quả được ghi lại trong một bảng như được hiển thị ở dưới cùng.

Trưng bày

Dice Cricket sử dụng một màn hình cụ thể để hiển thị tất cả các thông tin xảy ra.

Bảng có 11 hàng. Mỗi hàng đại diện cho một bột. Bố cục của hàng được giải thích dưới đây.

+------+------------------------------+---------+-----+
| Name |    Runs                      | How Out |Score|
+------+------------------------------+---------+-----+
  • Tên: Tên phải là một chuỗi được tạo thành hoàn toàn bằng chữ cái, chữ hoa hoặc chữ thường
  • Chạy: Một người đánh bóng có thể đối mặt với 30 quả bóng. Mỗi quả bóng có thể là một trong 1 2 4 6 . /. Điều này sẽ được giải thích chi tiết hơn dưới đây
  • How Out: Cách người đánh bóng đã ra ngoài. Có thể là bất kỳBowled, LBW (Leg Before Wicket), Caught, Retired or Not Out
  • Điểm: Tổng của tất cả các số trong Runs

Trò chơi hoạt động như thế nào

Trong một trận đấu, luôn có 2 batters trên sân. Người chơi đầu tiên theo mặc định là người đánh bóng hiện tại và người thứ hai trong người đánh bóng "tắt".

Một trò chơi được tạo thành từ "những quả bóng": mỗi quả bóng trong trận đấu cricket được thể hiện bằng một viên xí ngầu. Mỗi cuộn thực hiện một lệnh khác nhau:

  • 1,2,4 và 6 làm cho điểm số batter rất nhiều. Nếu 1 được lăn, người đánh bóng hiện tại trở thành người đánh bóng "tắt" và người đánh bóng "tắt" trở thành người hiện tại
  • 3 là một "chấm bi", nghĩa là không có gì xảy ra. Nó được biểu diễn trong Runsphần dưới dạng a .và điểm 0. A 0có thể không được sử dụng để thể hiện nó.
  • 5 là một cái bấc. Nếu 5 được lăn, người đánh bóng hiện tại "hết", Điều này có nghĩa là a /được thêm vào các lần chạy và từ đó trở đi, người đánh bóng không thể ghi điểm nữa. Người đánh bóng sau đó được trao đổi với người đánh bóng tiếp theo chưa đánh bóng. CácHow Out này là một lựa chọn ngẫu nhiên của các cách có thể để thoát ra:Bowled, LBW, Caught

Ví dụ cho một cái bấc (cái này chỉ để rõ ràng, đây không phải là cách nó xuất ra)

player a is on 4,6,2,6,4
player b is on 6,4,2,6,6
player c hasn't batted
player a is current batter

WICKET!!!

player a is on 4,6,2,6,4,/
player b in on 6,4,2,6,6
player c is on NOTHING
player c is current batter

Cứ 6 quả bóng, hai batters chuyển đổi; người đánh bóng hiện tại trở thành người đánh bóng "tắt" và người đánh bóng "tắt" trở thành người đánh bóng hiện tại

Nếu Runsphần được lấp đầy (30 quả bóng), người đánh bóng sẽ ra ngoài và How Outphần được đặt thành Retired. Một / không phải là được đặt ở cuối Runshộp.

Thử thách thực tế (vâng tất cả đó là luật chơi)

Thách thức của bạn là xuất ra một bảng hoàn thành (như ví dụ ở cuối), đưa ra một danh sách các tên. Nội dung của đầu ra chỉ nên chứa bảng và / hoặc khoảng trắng đầu hoặc cuối.

Quy tắc

  • Sơ hở tiêu chuẩn không được phép
  • Tất cả 11 người chơi nên có một cái gì đó trong Runs phần.
  • Chỉ có 1 người chơi có thể Not Out. Mọi người chơi không nghỉ hưu khác nên được lựa chọn[Bowled, LBW, Caught]
  • Tên có thể dài bất kỳ trong khoảng từ 1 đến 6 phù hợp với biểu thức chính quy A-Za-z
  • Dòng cuối cùng trong bảng phải là dòng tổng (xem ví dụ)
  • Bạn không phải căn chỉnh văn bản trong bảng theo bất kỳ cách nào, nhưng các dấu phân cách hàng và cột phải được căn chỉnh.

Thí dụ

Input:
['Fred', 'Sonya', 'David', 'Ben', 'Cody', 'Hazel', 'Nina', 'Kim', 'Cath', 'Lena', 'Will']
Output:
+------+------------------------------+---------+-----+
| Name | Runs                         | How Out |Total|
+------+------------------------------+---------+-----+
|Fred  |.662/                         | Caught  | 14  |
+------+------------------------------+---------+-----+
|Sonya |1164/                         | Caught  | 12  |
+------+------------------------------+---------+-----+
|David |/                             |   LBW   |  0  |
+------+------------------------------+---------+-----+
|Ben   |424/                          |   LBW   | 10  |
+------+------------------------------+---------+-----+
|Cody  |62/                           | Bowled  |  8  |
+------+------------------------------+---------+-----+
|Hazel |/                             |   LBW   |  0  |
+------+------------------------------+---------+-----+
|Nina  |161.6226166..44261442/        | Caught  | 64  |
+------+------------------------------+---------+-----+
|Kim   |11/                           | Caught  |  2  |
+------+------------------------------+---------+-----+
|Cath  |6.21/                         |   LBW   |  9  |
+------+------------------------------+---------+-----+
|Lena  |/                             | Bowled  |  0  |
+------+------------------------------+---------+-----+
|Will  |2                             | Not Out |  2  |
+------+------------------------------+---------+-----+
|               Total Runs                      | 121 |
+-----------------------------------------------+-----+


Heh, tôi đã từng chơi một biến thể tương tự của cái này được gọi là "Hand cricket".
hoàn toàn là

Điều gì quyết định khi trò chơi kết thúc? Có phải khi một người đánh bóng ra ngoài và không còn ai để thay thế anh ta?
KSmarts

@KSmarts Đúng.
caird coinheringaahing

1
@Jonathan ALLan Vâng, đó không phải là một yêu cầu tốt. Đã xóa
caird coinheringaahing

Câu trả lời:


2

Python 3 , 650 621 582 572 588 byte

from random import*
h=str
c=h.center
a='+'.join(map('-'.__mul__,[0,6,30,9,5,0]))+'\n'
b=lambda x,r=6:x.ljust(r,' ')
j=''.join
t=lambda a:sum(map(int,a[:-1].replace(*'.0')))
P=print
def s(i=30):
 while i:x=choice('12.4/6');yield x;i=('/'!=x)*~-i
def f(n,T=0):
 n=[*map(b,n)]
 P(a+f'| Name | Runs{" "*25}| How Out |Total|')
 for x in n[:-1]:S=j(s());T+=t(S);P(a,x,b(S,30),c(choice(['Bowled','LBW','Caught']),9),c(h(t(S)),5),sep='|',end='|\n')
 S=j(s());P(a,n[-1],b(S,30),' Not Out ',c(h(t(S)),5),sep='|',end='|\n');P(a+f'|{15*" "}Total Runs{15*" "}       |{c(h(T),5)}|\n+{47*"-"}+{5*"-"}+')

Hãy thử trực tuyến!

Chà, đã hơn 24 giờ và điều này khiến tôi mất khoảng một giờ để đánh đòn, vì vậy tôi hy vọng tôi không phải là ai đó, và tôi đã không chơi gôn trong một thời gian, vì vậy điều này rất vui (mặc dù điều này rất thú vị lần thứ hai tôi đã trả lời một trong những câu hỏi của riêng mình bằng câu trả lời Python dài)

Xin vui lòng gửi đề xuất golf, Python không phải là ngôn ngữ tốt nhất của tôi để chơi golf.

-68 byte nhờ FlipTack !

-8 byte nhờ ông Xcoder

+16 byte do lỗi


Thoạt nhìn, tôi có thể thấy khá nhiều gôn ... 1) Trong một trường hợp bạn vẫn sử dụng printthay vì P. 2) sumcó thể trực tiếp lấy một mapđối tượng, không cần phải chuyển đổi nó thành một danh sách. 3) Thay vì viết yield xhai lần, tại sao không yield xsau đó phá vỡ nếu cần thiết? 4) T=0có thể được đặt bên trong tiêu đề chức năng. 5) Trong chức năng cuối cùng của bạn, bạn đã sử dụng một số dòng mới, trong đó bạn chỉ có thể sử dụng một dòng với dấu chấm phẩy, ví dụ ba câu lệnh đầu tiên, ba câu lệnh cuối cùng và câu lệnh trong vòng lặp for.
FlipTack

@FlipTack Golf đẹp, và cảm ơn!
caird coinheringaahing

Bạn có thể chơi golf sđáng kể ... def s(i=30):và sau đó while i:x=choice('12.4/6');yield x;i=('/'!=x)*~-i. Ngoài ra, bạn chỉ gọi o()một lần, do đó không cần phải khai báo, chỉ cần sử dụng câu lệnh trực tiếp.
FlipTack

Điều tương tự cũng áp dụng cho b^^
FlipTack

@FlipTack Đã thêm các sân gôn. Cảm ơn!
caird coinheringaahing

0

Than , 277 255 byte

≔E¹¹⟦⟦⟧⁰S⟧θ≔⮌θηW⊖Lη«≔⊟ηι≔‽12.4/6ζ⊞υζ⊞§ι⁰ζ≔⎇⁼ζ/⁺²‽³⁼³⁰L§ι⁰ζ¿ζ§≔ι¹ζ⊞ηι¿⊖Lη¿⁼¬﹪Lυ⁶¬εF⟦⊟η⊟η⟧⊞ηκ»”|⁴B\[⎇⁻℅↧T`⁵·5KMK⟲M≦»→´⁶_⭆∨R▷↥l⁹KG…≦”Fθ«◨⊟ι⁷◨Σ§ι⁰¦³²§⪪”(3⪪⪫⧴πZJL:∨XI±URD↗Σ9⟦FZ∕↖l⪪”⁷⊟ι◧IΣE⊟ιΣκ⁶⸿⸿»”|QºWPD⟧zNφ[v?Π'vG”◧IΣEυΣι²⁸J±¹±¹FE¹³⁻²⁷⊗ι«B⁵⁵ιB⁴⁹ι¿‹ι²⁷«B³⁹ιB⁸ι

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

≔E¹¹⟦⟦⟧⁰S⟧θ

Đọc trong 11 tên (đầu vào là linh hoạt: JSON, phân tách không gian hoặc phân tách dòng mới) và tạo một mảng qgồm 11 batters, được biểu thị bằng các quả bóng của chúng (dưới dạng một mảng), trạng thái (dưới dạng số nguyên) và tên.

≔⮌θη

Tạo một bản sao đảo ngược của các batters h. Điều này đại diện cho các batters không ra ngoài. Hai yếu tố cuối cùng là các trận đấu tắt và hiện tại.

W⊖Lη«

Lặp lại trong khi có ít nhất hai batters có sẵn.

≔⊟ηι

Trích xuất bột hiện tại để i.

≔‽12.4/6ζ

Tạo một quả bóng ngẫu nhiên trong z.

⊞υζ

Thêm nó vào danh sách tổng thể của các quả bóng bằng cách sử dụng danh sách trống được xác định trước u.

⊞§ι⁰ζ

Thêm nó vào bóng của người đánh bóng hiện tại.

≔⎇⁼ζ/⁺²‽³⁼³⁰L§ι⁰ζ

Nếu quả bóng là a /, sau đó tạo trạng thái ngẫu nhiên 2..4, nếu không, đây là quả bóng thứ 30 của người đánh bóng, sau đó đặt trạng thái thành 1khác 0.

¿ζ§≔ι¹ζ⊞ηι

Nếu người đánh bóng ra ngoài thì lưu trữ trạng thái của người đánh bóng, nếu không hãy đặt người đánh lại vào dơi.

¿⊖Lθ¿⁼¬﹪ΣEηLκ⁶¬ζ

Nếu có ít nhất hai batters còn lại, và người đánh bóng đã ra xor 6 quả bóng đã được chơi, thì ...

F⟦⊟η⊟η⟧⊞ηκ»

... tháo các batters hiện tại và đưa chúng trở lại theo thứ tự ngược lại.

”|⁴B\[⎇⁻℅↧T`⁵·5KMK⟲M≦»→´⁶_⭆∨R▷↥l⁹KG…≦”

In tiêu đề.

Fθ«

Vòng qua các batters.

◨⊟ι⁷

In tên của người đánh bóng.

◨Σ§ι⁰¦³²

In bóng của người đánh bóng.

§⪪”(3⪪⪫⧴πZJL:∨XI±URD↗Σ9⟦FZ∕↖l⪪”⁷⊟ι

In trạng thái của người đánh bóng bằng cách lập chỉ mục thành chuỗi Not OutRetiredBowled Caught LBWphân tách thành chuỗi con có độ dài 7.

◧IΣE⊟ιΣκ⁶

In điểm của người đánh bóng.

⸿⸿»

Di chuyển đến đầu dòng tiếp theo nhưng một.

”|QºWPD⟧zNφ[v?Π'vG”◧IΣEυΣι²⁸

In tổng số.

J±¹±¹FE¹³⁻²⁷⊗ι«B⁵⁵ιB⁴⁹ι¿‹ι²⁷«B³⁹ιB⁸ι

Vẽ hộp xung quanh mọi thứ.

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.