JavaScript开关语句

JavaScript开关语句,javascript,switch-statement,Javascript,Switch Statement,我正试图写一个黑杰克游戏,但我需要一些帮助,试图找出如何根据需要在1和11之间切换王牌的价值。这就是我到目前为止所拥有的功能 function cValue(card){ if (typeof(card) === "string"){ switch(card){ case 'J': case 'Q': case 'K': return 10; break; case 'A':

我正试图写一个黑杰克游戏,但我需要一些帮助,试图找出如何根据需要在1和11之间切换王牌的价值。这就是我到目前为止所拥有的功能

function cValue(card){
  if (typeof(card) === "string"){
    switch(card){
        case 'J':
        case 'Q':
        case 'K':
            return 10;
        break;
        case 'A':  
            return 11;
        break;    
    }
  }    
  else return card;
}

非常简单:在逻辑的另一个点上,Ace需要是1还是11需要确定

但在特定函数中添加选择返回1还是11的功能非常简单:


function cValue(card, aceIs1)
{
    if (typeof card === "string") {
        switch(card) {
            case 'J':
            case 'Q':
            case 'K':
                return 10;
            case 'A':  
                return aceIs1 ? 1 : 11;
        }
    }    
    else return card;
}
这样,您就可以发送一个可选参数,使ace返回1

cValue('A'); // -> 11
cValue('A', false); // -> 11
cValue('A', true); // -> 1

然而,这对您的程序是否有用取决于您编写游戏的方式。

你很可能需要做更多的计划/构建,这是基于这样一个事实,在计算完分数后,你需要确定手中是否有a,并为每个a减去10,直到你不到21岁,只有当没有足够的a达到21岁时,才称之为半身像

比如,如果你有一个卡片值数组,比如
var hand=[9,'A','A']
你可以有一个函数来计算总手数,如下所示:

function calculateHand(hand)
{
    var total = 0, aces = 0, card;
    for (var i = 0, ii = hand.length; i < ii; i++)
    {
        card = hand[i];
        if (typeof card === 'number') { total += card; }
        else if (card === 'A') { total += 11; aces++; }
        else { total += 10; }
    }

    while (total > 21 && aces > 0)
        { total -= 10; aces--; }

    return total;
}

calculateHand(['A', 8]); // -> 19
calculateHand(['A', 8, 'A']); // -> 20
calculateHand(['A', 8, 'A', 'A']); // -> 21
函数计算器和(手动)
{
var总计=0,aces=0,卡片;
对于(变量i=0,ii=hand.length;i21&&aces>0)
{total-=10;aces--;}
返回总数;
}
计算和([A',8]);//->19
计算和(['A',8',A']);//->20
计算和([A',8',A',A']);//->21

因此,根据获得
21
的最佳条件,可以是
1
,也可以是
11
?这不是一个简单的开关就能做到的,你必须把数字加起来,然后计算出什么是有效的as
return
语句就在那些
中断语句之前将ace设置为11,然后测试总数是否超过21;如果是,请将ace更改为1。请添加代码的其余部分。因此,我需要在此之外编写另一个函数,用于检查手中卡片的总值,并在需要时将ace更改为1?var lowCards=[2,3,4,5,6];var midCards=[7,8,9];var highCards=[10,'J','Q','K','A'];var allCards=lowCards.concat(中卡、高卡);var card1=allCards[Math.floor(Math.random()*allCards.length)];var card2=allCards[Math.floor(Math.random()*allCards.length)];var总额=价值(card1)+价值(card2);控制台日志(card1、card2);log(“您的总手数为:“+total”);这是到目前为止代码的其余部分。很抱歉,我不知道如何使它显示在这里。@LennyG-我提供的函数适用于所有可能的卡值。不管怎样,将手中的牌存储为数组对你来说更有意义。一开始只有两张牌,但一手牌可以是任意数量的牌。不断增长的卡片列表最好用数组而不是单独的变量来表示。这里的jsfiddle显示了它的全部功能: