我试图写一个黑杰克游戏,但我需要一些帮助,试图找出如何在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;
}
答案 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