玩骰子板球游戏


12

骰子板球是我从小就被介绍的一款游戏,并且自那以后一直用作打发时间的一种方式。我找不到维基百科页面,所以我将在下面解释规则。

骰子板球规则

前提

骰子板球是类似于得分的游戏的游戏板球,你看它,但不是观看和录制的结果,你掷骰子,并记录结果。

结果记录在底部显示的表格中。

显示

骰子板球使用特定的显示屏来显示所有发生的信息。

该表有11行。每行代表一个击球手。该行的布局说明如下。

+------+------------------------------+---------+-----+
| Name |    Runs                      | How Out |Score|
+------+------------------------------+---------+-----+
  • 名称:名称必须是完全由大写或小写字母组成的字符串
  • 运行:击球手可以面对30个球。每个球可以是之一1 2 4 6 . /。这将在下面更详细地说明
  • 表现:击球手的出场方式。可以是任何Bowled, LBW (Leg Before Wicket), Caught, Retired or Not Out
  • 分数:中的所有数字之和 Runs

游戏如何运作

在游戏中,球场上总是有2个击球手。默认情况下,第一个玩家是当前击球手,第二个是“关闭”击球手。

游戏是由“球”组成的:板球比赛中的每个球都由掷骰子表示。每个滚动执行不同的命令:

  • 1,2,4和6使击球手得分高很多。如果将1滚动,则当前面糊将变为“关闭”面糊,而“ off”面糊将变为当前面糊
  • 3是“圆点球”,表示什么也没有发生。它在本Runs节中以a表示.,得分为0。A 0不能用来表示它。
  • 5是检票口。如果掷出5,则当前击球手为“出局”,这意味着a /被添加到奔跑中,此后,击球手将不再得分。然后将面糊与下一个未击打的面糊交换。本How Out节是随机选择的逃生方式:Bowled, LBW, Caught

检票口的示例(为清楚起见,这不是输出方式)

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

每6个球,两个击球手切换一次;当前击球手变为“击球手”击球手,“击球”击球手变为当前击球手球

如果该Runs部分已满(30个球),则击球手熄灭并将该How Out部分设置为Retired。A / 不在Runs框的末尾。

实际挑战(是游戏规则)

您面临的挑战是在给定名称列表的情况下输出完整的表(如末尾的示例)。输出的内容应仅包含表和/或前导或尾随空白。

规则

  • 不允许出现标准漏洞
  • 所有11位玩家都应在此Runs部分中添加内容。
  • 只能有1位玩家Not Out。其他所有未退休的球员都应选择[Bowled, LBW, Caught]
  • 名称可以是1到6之间与正则表达式匹配的任何长度 A-Za-z
  • 表中的最后一行应为总行(请参见示例)
  • 您不必以任何方式对齐表中的文本,但必须将行和列分隔符对齐。

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


嘿,我曾经玩过类似的游戏,叫做“手工板球”。
完全人类

什么决定了游戏何时结束?是击球手出场时没有人替代他吗?
KSmarts

@KSmarts正确。
caird coinheringaahing

1
@JonathanAllan是的,这不是一个很好的要求。已删除
caird coinheringaahing

Answers:


2

Python 3中650个 621 582 572 588字节

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*"-"}+')

在线尝试!

好吧,已经过去了24个小时,这花了我大约一个小时的时间,所以我希望我不要与任何人FGITW交往,而且我有一段时间没有打高尔夫球了,所以这很有趣(尽管第二次我用很长的Python答案回答了我自己的问题之一)

请随时发布高尔夫建议,Python并不是我最好的高尔夫语言。

-68字节,感谢FlipTack

-8个字节,感谢Xcoder先生

由于错误+16个字节


乍一看,我可以看到很多高尔夫球... 1)在某些情况下,您仍然使用print代替P。2)sum可以直接获取一个map对象,无需将其转换为列表。3)而不是写yield x了两次,为什么不yield x,然后如果有必要打破?4)T=0可以放在函数头中。5)在您的最后一个函数中,您使用了几行换行符,您可以仅在一行中使用分号,例如前三个语句,后三个语句以及for循环中的语句。
FlipTack

@FlipTack高尔夫不错,谢谢!
caird coinheringaahing

你可以打s很多球... def s(i=30):然后 while i:x=choice('12.4/6');yield x;i=('/'!=x)*~-i。另外,您只需调用o()一次,因此甚至无需声明它,只需直接使用该语句即可。
FlipTack

这同样适用于b^^
FlipTack

@FlipTack添加了高尔夫球。谢谢!
caird coinheringaahing

0

木炭277255字节

≔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⁸ι

在线尝试!链接是详细版本的代码。说明:

≔E¹¹⟦⟦⟧⁰S⟧θ

读入11个名称(输入是灵活的:JSON,空格或换行符),并创建一个q由11个击球手组成的数组,这些击球手的球(作为数组),状态(作为整数)和名称表示。

≔⮌θη

创建击球手的反向副本h。这代表了没有击球手。最后两个元素是关闭和当前击球员。

W⊖Lη«

重复至少有两个击球手。

≔⊟ηι

将当前面糊提取到i

≔‽12.4/6ζ

在中生成随机球z

⊞υζ

使用预定义的空列表将其添加到总球列表中u

⊞§ι⁰ζ

将其添加到当前击球手的球中。

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

如果球是a /,则生成随机状态2..4;否则,如果这是击球手的第30个球,则将状态设置为1否则0

¿ζ§≔ι¹ζ⊞ηι

如果击球手不在,则存储击球手的状态,否则将击球手放回击球棒。

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

如果至少还有两个击球手,而击球手已经出局或打了6个球,那么...

F⟦⊟η⊟η⟧⊞ηκ»

...取出击打电流击球手,然后按相反的顺序放回原位。

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

打印标题。

Fθ«

循环击球手。

◨⊟ι⁷

打印击球手的名字。

◨Σ§ι⁰¦³²

打印击球手的球。

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

通过索引到Not OutRetiredBowled Caught LBW长度为7的子字符串中的字符串来显示击球手的状态。

◧IΣE⊟ιΣκ⁶

打印击球手的分数。

⸿⸿»

移至下一行的开头,但只有一行。

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

打印总计。

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

在所有内容周围画框。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.