JavaScript 切换语句

JavaScript switch statement

我正在尝试编写 Black Jack 游戏,但我需要一些帮助来弄清楚如何根据需要在 1 和 11 之间切换 A 牌的点数。这是我目前拥有的功能。

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;
}

很简单:在逻辑的另一点上,需要确定 A 是 1 还是 11...

但是添加在该特定函数中选择 returns 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 return 1.

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

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

您很可能需要做更多的事情planning/structuring,因为计算您需要确定手中是否有 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