JavaScript开关语句
我正试图写一个黑杰克游戏,但我需要一些帮助,试图找出如何根据需要在1和11之间切换王牌的价值。这就是我到目前为止所拥有的功能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':
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
?这不是一个简单的开关就能做到的,你必须把数字加起来,然后计算出什么是有效的asreturn
语句就在那些中断语句之前代码>将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显示了它的全部功能: