【问题标题】:PHP Blackjack acesPHP二十一点王牌
【发布时间】:2012-07-31 21:53:23
【问题描述】:

PHP 21 点脚本很简单,我有一组牌,我随机选择一张并添加它,而且保持计数也很容易。

除了暴力破解之外,还有什么有效的方法来计算它们吗?从理论上讲,有可能(尽管极不可能)连续获得 4 个 ace,我如何让它算作 14 而不是 44、34、24 等? (最接近 21 没有超过它)

【问题讨论】:

  • 很高兴看到你的代码。
  • 一个可能是:总是选择最大的一个,如果超过 21,则减去 10 以获得最大的 A 数。 4xAces=44->34->24->14

标签: php


【解决方案1】:

这样处理 ace:

$total = 0;
// Sort in a way that the aces are last, handle other cards FIRST
foreach($cards as $card)
{
    switch($card)
    {
        case "king":
        case "queen":
        case "jack":
        case "10":
            $total += 10;
            break;

        // Etc, other cards

        case "ace":
            if($total >= 11)
            {
                $total += 1;
            }
            else
            {
                $total += 11;
            }
            break;
    }
}

【讨论】:

  • 您可能需要稍微调整一下,例如,给定这 3 张牌:5、A、7;你会破产的;当它真的应该是 13你会没事的。
  • 代码无法正常工作,因为每次卡不是王牌时都会执行 $total+=11 但伪代码很好,我基于此编写了代码。
【解决方案2】:

由于 A 的规则,二十一点中的牌本身没有价值。您无需查看每张卡片、确定值并添加它们。

您查看手牌,并确定手牌的价值。

现在在确定一手牌的价值时,对于大多数牌来说,它的价值等于牌号,但是您需要针对面牌和 A 的特殊逻辑。

因此: 不要从你的牌组中抽出“数字”,抽出“卡片”,然后编写一个函数,将“卡片”的“手”(列表)计算为一个值。

【讨论】:

    猜你喜欢
    • 2019-09-09
    • 1970-01-01
    • 2010-10-24
    • 2011-02-02
    • 2014-07-19
    • 2020-06-18
    • 2011-01-25
    • 2019-06-03
    • 2018-04-02
    相关资源
    最近更新 更多