JavaScript切换语句

时间:2016-01-03 21:26:44

标签: javascript switch-statement

我试图写一个黑杰克游戏,但我需要一些帮助,试图找出如何在1&之间切换Ace卡的价值。 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;
}

1 个答案:

答案 0 :(得分:0)

很简单:在逻辑中的另一点,需要确定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并且每个减去10的点数之后的事实ace直到你未满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