2012-07-26 23 views
1

PHP大酒杯脚本很简单,我有一个卡片阵列,我选择一个随机的卡片,并添加它,并且保持计数的硬盘部分与ace一起也很容易。PHP Blackjack ace

除bruteforcing之外,是否有任何有效的方法来计算它们?从理论上讲,有可能(虽然极不可能)连续得到4个ace,但我怎样才能将它计为14而不是44,34,24等? (最接近21而没有超过它)

+4

它会很高兴看到你的代码。 – Adi 2012-07-26 14:37:32

+0

其中一个可能是:总是选择最大的一个,如果超过21个,则减去10个最大的a个数。 4xAces = 44-> 34-> 24-> 14 – 2012-07-26 14:39:44

+1

重复的答案见:http://stackoverflow.com/questions/837951/is-there-an-elegant-way-to-deal-with-the- ace-in-blackjack?rq = 1 – 2012-07-26 14:41:28

回答

2

像这样的东西来处理王牌:

$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; 
    } 
} 
+0

您可能需要稍微调整一下,例如,给定3张牌:5,A,7;你会破灭;当它真的应该是13.当然,如果你对你的列表进行排序,以便你总是最后使用ace,你会没事的。 – 2012-07-26 14:54:16

+0

是的,这就是为什么我编写'处理其他卡'首先 – 2012-07-26 15:00:08

+0

代码无法正常工作,因为$总+ = 11执行每次卡不是一个王牌,但psuedocode是好的,我写了我的代码基于此。 – Madmadmax 2012-07-31 13:22:32

0

由于ace的规则,大二十一点的牌本身并不具有价值。你不看每张卡,确定一个值,并添加这些值。

你看看手,并确定手的价值。

现在,当确定一只手的值时,对于大多数卡片来说其值为真,这个值等于卡片号码,但是你需要特殊的面部卡片和王牌。

因此: 不要在你的套牌中画出“数字”,画出“牌”,并写一个函数来评估“牌”的“手牌”(列表)为一个值。