You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为二十一点游戏实现可扩展的手牌分数计算(含Ace处理)

实现适配任意数量手牌的二十一点分数计算逻辑

核心思路是不修改原始Card对象(保留终端绘制卡牌所需的初始值),通过单独统计总分与Ace数量动态调整分值,既支持任意数量手牌,又能妥善处理多张Ace导致的爆牌问题。

解决方案代码

def calculate_score(player_card_data):
    """
    计算任意数量手牌的二十一点分数,自动处理Ace的11/1转换,不修改原始Card对象
    """
    total_score = 0
    ace_count = 0

    # 统计初始总分(Ace按11计算)及Ace数量
    for card in player_card_data:
        total_score += card.card_value
        if card.card_value == 11:  # 通过初始值判断是否为Ace
            ace_count += 1

    # 若总分爆牌且有可用Ace,逐个将Ace从11转为1(每次扣减10)
    while total_score > 21 and ace_count > 0:
        total_score -= 10
        ace_count -= 1

    return total_score

关键逻辑说明

  • 适配任意手牌数:通过遍历所有手牌而非固定索引,支持2张及以上任意数量的卡牌计算。
  • 处理多张Ace爆牌:先按11计算所有Ace分值,若总分超过21,依次将Ace分值从11调整为1,直到总分≤21或无Ace可调整(比如3张Ace初始总分33,调整两次后变为13)。
  • 保留原始Card对象:全程不修改card.card_value的原始值,确保后续用blessed绘制卡牌时,卡牌的初始信息不受影响。

测试场景验证

  • 两张Ace:初始总分22 → 调整后返回12
  • A+K+5:初始总分26 → 调整后返回16
  • 2+3+4+5+6:总分20 → 直接返回20

内容的提问来源于stack exchange,提问作者user21629409

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 09:25:03