5个不稳定版本
0.3.1 | 2023年9月5日 |
---|---|
0.3.0 | 2023年9月3日 |
0.2.4 | 2023年6月18日 |
0.1.0 | 2023年5月28日 |
#1 in #war
42KB
965 行
战争(纸牌游戏)
战争(纸牌游戏)模拟应用程序。应用程序模拟了战争纸牌游戏,通常由两名玩家使用标准的54张牌进行。
游戏的目标是赢得牌堆中的所有牌。
以下是玩战争纸牌游戏的规则
-
设置:牌堆被平均分给两名玩家,每人获得26张牌。保持你的牌面朝下,不要看它们。
-
游戏玩法:两名玩家同时从各自的牌堆中翻出顶牌,并将它们面朝上放在桌上。牌面更高的玩家赢得该回合,并收集两张牌,将它们面朝下放在自己的牌堆底部。从高到低的牌序如下:A(王牌)、K(国王)、Q(王后)、J(杰克)、10、9、8、7、6、5、4、3、2。
-
战争:如果两张翻出的牌面值相同,则结果是"战争"。在这种情况下,两名玩家额外放置牌面朝下的牌,然后从各自的牌堆中再翻出一张牌。牌面更高的玩家赢得桌上所有牌。如果还有平局,则重复此过程,直到一名玩家拥有更高牌面的牌。
-
牌面价值:需要注意的是,在战争游戏中,花色(红心、方块、黑桃、梅花)不影响牌的排名或游戏结果。只考虑牌的价值。
-
获胜:游戏继续进行,直到一名玩家收集了所有牌,从而成为赢家。如果在战争中某名玩家用完了牌,则该玩家输掉游戏。
战争是一种简单、基于运气的纸牌游戏,通常由儿童或作为休闲活动玩。游戏不需要技巧或策略,因为每轮的结果完全由牌的排名决定。
用法
这是一个命令行应用程序,模拟整个游戏。用户可以选择牌堆洗牌的种子和输出模式。
牌堆是标准的54张法国花色牌,包含四个花色(♣、♦、♥、♠)中的13个等级。牌堆的初始顺序(洗牌之前)如下
🃒 🃂 🂲 🂢 🃓 🃃 🂳 🂣 🃔 🃄 🂴 🂤 🃕 🃅 🂵 🂥 🃖 🃆 🂶 🂦 🃗 🃇 🂷 🂧 🃘 🃈 🂸 🂨 🃙 🃉 🂹 🂩 🃚 🃊 🂺 🂪 🃛 🃋 🂻 🂫 🃝 🃍 🂽 🂭 🃞 🃎 🂾 🂮 🃑 🃁 🂱 🂡
第一步,使用用户指定的或随机生成的种子对牌堆进行洗牌。
示例
$ war_card_game --seed 10
Starting game!
Deck: 🃒 🃂 🂲 🂢 🃓 🃃 🂳 🂣 🃔 🃄 🂴 🂤 🃕 🃅 🂵 🂥 🃖 🃆 🂶 🂦 🃗 🃇 🂷 🂧 🃘 🃈 🂸 🂨 🃙 🃉 🂹 🂩 🃚 🃊 🂺 🂪 🃛 🃋 🂻 🂫 🃝 🃍 🂽 🂭 🃞 🃎 🂾 🂮 🃑 🃁 🂱 🂡
Shuffling deck with seed 10
Deck: 🃎 🃖 🂺 🃘 🂥 🂭 🃙 🃁 🂱 🂲 🃝 🂸 🃑 🃂 🃓 🂶 🂾 🂤 🂡 🂵 🂫 🂮 🃅 🃊 🂽 🂣 🂦 🃉 🃚 🃋 🃞 🂻 🃔 🃒 🃕 🂷 🂢 🂩 🂨 🃈 🃍 🂴 🂧 🃇 🂪 🃃 🃛 🃆 🂹 🃄 🂳 🃗
Let's deal!
Starting setup:
P2: 🃗 🃄 🃆 🃃 🃇 🂴 🃈 🂩 🂷 🃒 🂻 🃋 🃉 🂣 🃊 🂮 🂵 🂤 🂶 🃂 🂸 🂲 🃁 🂭 🃘 🃖
P1: 🂳 🂹 🃛 🂪 🂧 🃍 🂨 🂢 🃕 🃔 🃞 🃚 🂦 🂽 🃅 🂫 🂡 🂾 🃓 🃑 🃝 🂱 🃙 🂥 🂺 🃎
Game over!
Player 1 won in round 146
Player 2 lost in 146
Longest war: 2
用户可以通过使用种子范围选项选择多个种子
-r, --range <RANGE> Range (start-end) of seeds for deck shuffling
其中 RANGE
的形式为 start-end
,且 start
< end
。对于种子范围,默认(也是唯一支持的)输出模式是 one-line
输出级别
Players: 2, seed: 0, winner: Player 2, winning round: 118
Players: 2, seed: 1, winner: Player 2, winning round: 176
Players: 2, seed: 2, winner: Player 2, winning round: 568
Players: 2, seed: 3, winner: Player 1, winning round: 654
Players: 2, seed: 4, winner: Player 2, winning round: 164
Players: 2, seed: 5, winner: Player 2, winning round: 126
Players: 2, seed: 6, winner: Player 2, winning round: 230
Players: 2, seed: 7, winner: Player 2, winning round: 116
Players: 2, seed: 8, winner: Player 1, winning round: 516
Players: 2, seed: 9, winner: Player 1, winning round: 380
用户可以通过使用输出选项
-o, --output <OUTPUT> Output level [default: normal] [possible values: one-line, quiet, normal, verbose]
或“快捷”选项
-v, --verbose Verbose mode
-q, --quiet Quiet mode
-1, --one-line One line output mode
-
verbose
输出级别会打印整个模拟的所有细节war_card_game --seed 10 -v Starting game! Deck: 🃒 🃂 🂲 🂢 🃓 🃃 🂳 🂣 🃔 🃄 🂴 🂤 🃕 🃅 🂵 🂥 🃖 🃆 🂶 🂦 🃗 🃇 🂷 🂧 🃘 🃈 🂸 🂨 🃙 🃉 🂹 🂩 🃚 🃊 🂺 🂪 🃛 🃋 🂻 🂫 🃝 🃍 🂽 🂭 🃞 🃎 🂾 🂮 🃑 🃁 🂱 🂡 Shuffling deck with seed 10 Deck: 🃎 🃖 🂺 🃘 🂥 🂭 🃙 🃁 🂱 🂲 🃝 🂸 🃑 🃂 🃓 🂶 🂾 🂤 🂡 🂵 🂫 🂮 🃅 🃊 🂽 🂣 🂦 🃉 🃚 🃋 🃞 🂻 🃔 🃒 🃕 🂷 🂢 🂩 🂨 🃈 🃍 🂴 🂧 🃇 🂪 🃃 🃛 🃆 🂹 🃄 🂳 🃗 Let's deal! Starting setup: P1: 🃗 🃄 🃆 🃃 🃇 🂴 🃈 🂩 🂷 🃒 🂻 🃋 🃉 🂣 🃊 🂮 🂵 🂤 🂶 🃂 🂸 🂲 🃁 🂭 🃘 🃖 P2: 🂳 🂹 🃛 🂪 🂧 🃍 🂨 🂢 🃕 🃔 🃞 🃚 🂦 🂽 🃅 🂫 🂡 🂾 🃓 🃑 🃝 🂱 🃙 🂥 🂺 🃎 Round 1 P1: 🃗 🃄 🃆 🃃 🃇 🂴 🃈 🂩 🂷 🃒 🂻 🃋 🃉 🂣 🃊 🂮 🂵 🂤 🂶 🃂 🂸 🂲 🃁 🂭 🃘 🃖 P2: 🂳 🂹 🃛 🂪 🂧 🃍 🂨 🂢 🃕 🃔 🃞 🃚 🂦 🂽 🃅 🂫 🂡 🂾 🃓 🃑 🃝 🂱 🃙 🂥 🂺 🃎 P1 🃗 P2 🂳 Round 1 winner is Player 1 ... Round 146 P1: 🃂 P2: 🃖 🃞 🂭 🃝 🂲 🂶 🃄 🂻 🂸 🂺 🂴 🂧 🂳 🂽 🂥 🃘 🃃 🃁 🃊 🂡 🃈 🂩 🂨 🂾 🃚 🃗 🃔 🃑 🃍 🂦 🃆 🂱 🂵 🃛 🃒 🂮 🃋 🃎 🂹 🃕 🂤 🂫 🃙 🃅 🂢 🂪 🃉 🂷 🃓 🃇 🂣 P2 🃖 P1 🃂 Round 146 winner is Player 2 Game over! Player 2 won in round 146 Player 1 lost in 146 Longest war: 2
-
normal
输出级别会打印洗牌种子、初始牌堆、洗牌后的牌堆、每位玩家的起始手牌以及游戏结果(包括最后一轮编号和“最长”的 战争,见示例)。 -
quiet
输出级别会打印洗牌种子、洗牌后的牌堆和游戏结果(包括最后一轮编号)$ war_card_game --seed 10 -q Shuffling deck with seed 10 Deck: 🃎 🃖 🂺 🃘 🂥 🂭 🃙 🃁 🂱 🂲 🃝 🂸 🃑 🃂 🃓 🂶 🂾 🂤 🂡 🂵 🂫 🂮 🃅 🃊 🂽 🂣 🂦 🃉 🃚 🃋 🃞 🂻 🃔 🃒 🃕 🂷 🂢 🂩 🂨 🃈 🃍 🂴 🂧 🃇 🂪 🃃 🃛 🃆 🂹 🃄 🂳 🃗 Player 2 won in round 146 Player 1 lost in 146
-
one-line
输出级别会在单行中打印与quiet
模式相同的所有信息(除了洗牌后的牌堆)$ war_card_game --seed 10 -1 Players: 2, seed: 10, winner: Player 2, winning round: 146
故事
该项目是在寒假聚会之后创建的,当时我十几岁的儿子在与(也是十几岁的)朋友的儿子玩这个游戏。看他们玩很有趣。我中途加入,作为第三个玩家玩了几轮,但所有的牌都输了,他们继续玩了大约半小时左右。
我们开始想知道这样的游戏可能需要多长时间?
如果我们假设一局需要 ~2 秒,那么(不准备)的游戏可能从不到一分钟(种子 53822)到超过一小时(种子 6958)。
BartoszCiesla @ 2023
依赖关系
~1.9–2.5MB
~48K SLoC