我如何将二十一点牌中的“王牌”定义为 11 或 1?
Posted
技术标签:
【中文标题】我如何将二十一点牌中的“王牌”定义为 11 或 1?【英文标题】:How would I define 'Ace' in a blackjack deck as 11 or 1? 【发布时间】:2019-09-09 09:19:12 【问题描述】:我正在尝试创建二十一点游戏。我唯一的问题是如果 11 会爆牌,如何将 Ace 更改为 1。
当玩家手牌被破坏时,我尝试使用 score.append(Ace = 1)。唯一的问题是,此后的每个 ace 现在都是 1。因此,如果庄家有 ace,则 ace 是 1。如果我在最后重新计算得分时尝试将其改回 11,玩家得分现在有10 额外分数(将 10 与 ace 值 1 相加得到 11)。除了追加之外,我还尝试添加另一个字典,但我不知道如何实现另一个字典。我还尝试完全重写我的程序以减少类。
我希望程序能够根据值将 ace 更改为 1 或 11。我不知道还能尝试什么。如果有利于帮助我理解如何做,我可以添加更多代码。
【问题讨论】:
【参考方案1】:简单的数字总和无法捕获 ace 可能具有的两个可能值。相反,您需要添加一些额外的代码来处理二十一点的这一方面。
一种相对简单的方法是在将牌的正常值相加的同时计算 A 的数量。如果您失败了,您可以调整分数,以 10 为增量,为您看到的每个 ace(10,因为这是 11 和 1 之间的差异)。
def get_score(self):
score = 0
aces = 0
for c in cards:
score += c.get_score() # aces should return a value of 11
if c.getrank() == "Ace": # count aces
aces += 1
while aces > 0 and score > 21: # try to avoid a bust by changing ace values from 11 to 1
score -= 10 # until the bust has ben avoided, or you're out of aces
aces -= 1
return score
【讨论】:
感谢您的帮助。我在我制作的重写文件中试过这个,但没有 if c.getrank() == 'Ace':以上是关于我如何将二十一点牌中的“王牌”定义为 11 或 1?的主要内容,如果未能解决你的问题,请参考以下文章