今天在freeCodeCamp上做题时,有一道题目讲的是21点的算法,从网上搜索了一下21点的规则如下:

21点(blackjack)算法[转] -- Beat the dealer

来源: 顾斌梦追い虫的日志

21点的优选算法,据说把输牌的概率降低到了0.5%,研究一下。 首先学的是二十一点的规则。

  我们可以看出,二十一点的结果很大程度上依赖于玩家的选择。象轮盘赌、百家乐那种游戏,玩家压上钱后,就只 好祈祷上帝,期盼好运降临,然后咣当一声,一拍两散,是死是活,当场就见分晓。

  二十一点、牌九等游戏则不同,在发下牌后,玩家可以在一定程度上控制自己的 最终结果,因此如果应对得当,可以使自己的损失减到最小。这就是所谓“基本策略(Basic Strategy)”。 二十一点规则 1,游戏由玩家和庄家(即赌场的发牌员)对玩,看谁的牌面点数更靠近21点。但如果超过了21点,则称为“爆掉”,算输。其中花牌(J,Q,K)都算10点,A可以算1点,也可以算11点,看哪种情况更有利。玩家之间不做比较。 2,游戏开始时,所有玩家和庄家各拿两张牌,一般来说,是玩家两张牌牌面朝上,庄家一张牌面朝上,一张牌面朝下。 3,两张牌的点数,肯定介于2到21点之间。21点只可能是一张10(包括J,Q,K,下同)和一张A,这叫“天成(BlackJack,以下简称BJ)”,除非庄家也拿到了BJ,不然赢一倍半的赌注。

 

好吧,我们还是可以用判断语句来完成这个函数,我选择了用case语句来实现,具体代码如下:

function cc(card) {
  switch(card){
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
      count++;
      break;
    case 10:
    case "J":
    case "Q":
    case "K":
    case "A":
      count--;
      break;
  }
      
      if(count>0){
      return count+" Bet";
  }else if(count<=0){
      return count+" Hold";
  }
}

我们用case语句,当牌面为2,4,5,6时,count依次递增,

牌面为10,"J","Q","K","A"时count递减