我如何将二十一点牌中的“王牌”定义为 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?的主要内容,如果未能解决你的问题,请参考以下文章

我在 Java 中做错了啥二十一点文件计数器?

在 for 循环中更新变量

如何更改列表中的元素?

我如何循环二十一点答案输入

笨办法学Python(二十一)

我无法在二十一点游戏中关闭我的while循环[关闭]