我一直在为这个纸牌游戏做功课并撞墙。
我正在使用Score()
方法尝试重视我的所有卡片。我有一个foreach
循环,其中包含switch
。
问题是Ace。 我想说如果超过1个Ace,则将它们全部视为其他11。
public int Score()
{
int score = 0;
foreach (Card c in hand)
{
switch (c.Value)
{
// Count all face cards as 10
case 'A':
score += 1;
break;
case 'T':
case 'J':
case 'K':
case 'Q':
score += 10;
break;
default:
score += (c.Value - '0');
break;
}
//if (score > 21)
// switch (c.Value)
// {
// case 'A':
// score += 11;
// break;
// }
}
return score;
}
我评论了我正在玩的一个部分,但是我无法绕过试图编码&#39;如果不止一个ace,值为1,否则11&#39; < / p>
答案 0 :(得分:1)
我会采用一个单独的变量来计算aces并在最后对其进行评估。如果1 ace存在则添加11,否则添加1 * numberOfAces。
在foreach循环之外的分数旁边添加它。所以在案例“A”的分数评估应该在循环结束后完成并且你有aces计数。
答案 1 :(得分:1)
我能想到的其中一种方法是为Aces添加一个计数器。实际上,case A:
将是:
case 'A':
score+=1;
ctrA++;
break;
在switch
之外:
if(ctrA == 1) //only one ace
score+= 10; //add 10 to make the score for that ace 11.
答案 2 :(得分:0)
我建议在切换案例中和之后添加更多逻辑。例如,您可以使用计数器来跟踪手中有多少Aces。例如:
public int Score()
{
int score = 0;
int amountOfAces = 0;
foreach (Card c in hand)
{
switch (c.Value)
{
// Count all face cards as 10
case 'A':
amountOfAces++;// increment aces by 1
score += 11;
break;
case 'T':
case 'J':
case 'K':
case 'Q':
score += 10;
break;
default:
score += (c.Value - '0');
break;
}
// Then adjust score if needed
if(amountOfAces>1){
//since we know how many were found.
score = score-amountOfAces*11;
score = score+amountOfAces;
}
}
return score;
}
答案 3 :(得分:0)
您可能希望Ace在其他场景中计为1,而不仅仅是&#34;多于一个ace&#34;。如果用户有一个Jack,Three,Ace,你希望Ace计为1.我会把所有不是A的牌加起来并加起来。然后取多少A减去1并将该计数加到总数中。最后,检查你的总数是否< 11,你可以将Ace计数为11,否则,你必须将它计为1。
public int Score()
{
var score = 0;
var aceCount = 0;
foreach (Card c in hand)
{
switch (c.Value)
{
case 'A':
aceCount++;
break;
case 'T':
case 'J':
case 'K':
case 'Q':
score += 10;
break;
default:
score += (c.Value - '0');
break;
}
}
if(aceCount == 0)
{
return score;
}
//Any ace other than the first will only be worth one point.
//If there is only one ace, no score will be added here.
score += (aceCount-1);
//Now add the correct value for the last Ace.
if(score < 11)
{
score += 11;
}
else
{
score++;
}
return score;
}